如何在 PowerShell 的进一步请求中保存和使用 ReST 响应
How to save & use a ReST response in further requests in PowerShell
我正在尝试在 PowerShell 中实施 ReST 请求。
请求 1:
$response = Invoke-RestMethod "my-custom-url" -Headers $headers -Method POST -Body $json -ContentType "application/json" -OutFile output.json -SessionVariable sv
请求 1 的响应:
{
"@type": "user",
"id": "00000703000000000010",
"orgId": "000007",
"name": "xxx@gmail.com",
}
我需要保存 "id" 的值并将其添加到下一个请求的 header 中。我怎样才能做到这一点?
----更新--添加WriteHost $response
@{@type=user; id=00000703000000000010; orgId=000007; name=xxx; createTime=2014-08-27T12:12:21.000Z; updateTime=2016-02-27
T00:40:13.000Z; createdBy=xxx@gmail.com; updatedBy=xxx; sfUsername=ppanigrahi; firstName=Pravakar; lastName=P
anigrahi; password=********; phone=9008433201; emails=xxx@gmail.com; timezone=IST; serverUrl=http://localhost:16006/saas; spiUrl
=https://localhost:8080/; icSessionId=QpXZEkqYEflJRY7h; securityQuestion=MOTHER_MAIDEN_NAME; forceChangePassword=False; uuid=C1bL60uIQqyRaF3
nXCHFkA; roles=System.Object[]; usergroups=System.Object[]}
$response.id
应包含您需要的值,因为 Powershell 会自动将 json 响应转换为 PSCustomObject。然后,您应该能够通过 $headers.Add("HeaderName",$response.id)
将该值添加到 $headers
变量,或者使用适当的 header 名称创建一个新哈希表,$request2Headers = @{ "HeaderName" = $response.id }
.
由于您使用的是 Invoke-RestMethod,响应将是一个 object,其中包含带有数据的属性,您可以从 $Response.id.
我不确定您是想尝试将 "Id" 作为 header 值还是作为 cookie 传递(因为您还指的是 session 变量; 您通常会坚持的地方,例如 cookie 等)。
如果您只想传递包含字段 "Id" 的 custom-header,您可以在下一个请求之前执行以下操作:
$headers.Add("Id",$response.id);
我假设您已经在这里预先定义了 $headers。否则你可以直接用 $headers = @{"Id"=$response.id};.
创建它
然后在下一个服务调用中,像您已经做的那样重用您的 $headers 变量。
如果您真正想要实现的是创建一个 cookie 并将其添加到您的 session(变量),这样您就不必在每次后续调用时都重复自己;您应该创建一个 cookie 并添加它执行以下操作:
$c=New-Object System.Net.Cookie;
$c.Name="Id";
$c.Path="/"
$c.Value = $response.Id;
# Make sure domain and path is matching your backend-server
$c.Domain = "foobar.com";
# Add cookie to your websession
$sv.Cookies.Add($c);
这将创建一个 cookie 并将其添加到您的网站session(如果 $sv 在您的 session 中)。如果你没有网络请求 session ($sv 在你的情况下),你可以使用 $sv = New-Object Microsoft.PowerShell.Commands.WebRequestSession;
我正在尝试在 PowerShell 中实施 ReST 请求。
请求 1:
$response = Invoke-RestMethod "my-custom-url" -Headers $headers -Method POST -Body $json -ContentType "application/json" -OutFile output.json -SessionVariable sv
请求 1 的响应:
{
"@type": "user",
"id": "00000703000000000010",
"orgId": "000007",
"name": "xxx@gmail.com",
}
我需要保存 "id" 的值并将其添加到下一个请求的 header 中。我怎样才能做到这一点?
----更新--添加WriteHost $response
@{@type=user; id=00000703000000000010; orgId=000007; name=xxx; createTime=2014-08-27T12:12:21.000Z; updateTime=2016-02-27
T00:40:13.000Z; createdBy=xxx@gmail.com; updatedBy=xxx; sfUsername=ppanigrahi; firstName=Pravakar; lastName=P
anigrahi; password=********; phone=9008433201; emails=xxx@gmail.com; timezone=IST; serverUrl=http://localhost:16006/saas; spiUrl
=https://localhost:8080/; icSessionId=QpXZEkqYEflJRY7h; securityQuestion=MOTHER_MAIDEN_NAME; forceChangePassword=False; uuid=C1bL60uIQqyRaF3
nXCHFkA; roles=System.Object[]; usergroups=System.Object[]}
$response.id
应包含您需要的值,因为 Powershell 会自动将 json 响应转换为 PSCustomObject。然后,您应该能够通过 $headers.Add("HeaderName",$response.id)
将该值添加到 $headers
变量,或者使用适当的 header 名称创建一个新哈希表,$request2Headers = @{ "HeaderName" = $response.id }
.
由于您使用的是 Invoke-RestMethod,响应将是一个 object,其中包含带有数据的属性,您可以从 $Response.id.
我不确定您是想尝试将 "Id" 作为 header 值还是作为 cookie 传递(因为您还指的是 session 变量; 您通常会坚持的地方,例如 cookie 等)。
如果您只想传递包含字段 "Id" 的 custom-header,您可以在下一个请求之前执行以下操作:
$headers.Add("Id",$response.id);
我假设您已经在这里预先定义了 $headers。否则你可以直接用 $headers = @{"Id"=$response.id};.
创建它然后在下一个服务调用中,像您已经做的那样重用您的 $headers 变量。
如果您真正想要实现的是创建一个 cookie 并将其添加到您的 session(变量),这样您就不必在每次后续调用时都重复自己;您应该创建一个 cookie 并添加它执行以下操作:
$c=New-Object System.Net.Cookie;
$c.Name="Id";
$c.Path="/"
$c.Value = $response.Id;
# Make sure domain and path is matching your backend-server
$c.Domain = "foobar.com";
# Add cookie to your websession
$sv.Cookies.Add($c);
这将创建一个 cookie 并将其添加到您的网站session(如果 $sv 在您的 session 中)。如果你没有网络请求 session ($sv 在你的情况下),你可以使用 $sv = New-Object Microsoft.PowerShell.Commands.WebRequestSession;