从webrequest读取`Set-Cookie`标头,并在Powershell中发送cookie详细信息

时间:2019-04-04 11:25:50

标签: powershell cookies

我只使用powershell。

我有一个要首先登录的网址:https://.../login(具有凭据)

[string]$url = "http://blabla";
[string]$login = "$url/login";
[string]$user = "admin";
[string]$pass = "tester";
[string]$qs = "username=$user&password=$pass";

Invoke-WebRequest $login -Method Post -Body $qs -UseBasicParsing -SessionVariable session;

我从服务器上得到了一些答案,例如:

Content-Length: 3 
Content-Type: text/plain; charset=UTF-8 
Set-Cookie:  SID=....; path=/

通过调用该请求,我想获取Cookie SID,并在以后的调用中使用它:

Invoke-WebRequest $test -Method GET -UseBasicParsing -WebSession $session;

但是我收到403错误。

如何为$test请求传递该cookie?

2 个答案:

答案 0 :(得分:0)

如果$test包含该输出并且是具有这些属性的对象,则可以使用以下内容。这将输出SID=...

($test.Set-Cookie -split ";")[0]

如果只需要SID的值,则可以使用:

($test.Set-Cookie -split ";" -split "SID=")[1]

答案 1 :(得分:0)

如果您要手动从请求中提取Set-Cookie标头,则需要从响应中捕获该标头:

$response = Invoke-WebRequest $login ...
$response.Headers['Set-Cookie'] | ? { $_ -match '^SID' }

但是我想指出的是,当您使用SessionVariable参数时,您已经在捕获Cookie:

$session.Cookies.GetCookies($url)

您可以执行以下操作将这些cookie传递给新请求:

Invoke-WebRequest ... -WebSession $session