我正在尝试在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”&的价值将其添加到下一个请求的标头中。我怎样才能做到这一点?
----更新 - 添加WriteHost $响应
@{@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[]}
答案 0 :(得分:1)
由于您正在使用Invoke-RestMethod,因此响应将是一个包含数据属性的对象,您可以从$ Response.id访问该ID。
我不确定你是否想尝试将“Id”作为标题值或cookie传递(因为你也指的是你的会话变量;你通常会坚持使用例如cookie等)。
如果你想要的只是传递一个包含字段“Id”的自定义标题,你可以在下一个请求之前执行以下操作:
$headers.Add("Id",$response.id);
我假设你事先在这里定义了$ header。否则,您可以使用$ headers = @ {“Id”= $ response.id};。
直接创建它然后在下一次服务调用时,只需重新使用$ headers变量。
如果您真正想要实现的是创建一个cookie并将其添加到您的会话(变量)中,那么您不必为每个后续调用重复自己;您应该创建一个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并将其添加到您的websession(如果$ sv在您的会话中)。如果您没有webrequest会话(在您的情况下为$ sv),您可以使用$ sv = New-Object Microsoft.PowerShell.Commands.WebRequestSession;
在此之前创建它。答案 1 :(得分:0)
$response.id
应该包含您需要的值,因为Powershell会自动将json响应转换为PSCustomObject。然后,您应该可以通过$headers
将该值添加到$headers.Add("HeaderName",$response.id)
变量中,或者使用相应的标题名$request2Headers = @{ "HeaderName" = $response.id }
创建一个新的哈希表。