Invoke-WebRequest:接受cookie

时间:2017-03-08 17:15:50

标签: powershell

我正在更新此标题,因为我确信这是接受cookie,将其记录在会话变量中并将其传递给websession中的下一个Web请求。虽然我可能更接近,但我仍然无法做到。

关于以下URI:https://support.microsoft.com/en-us/hotfix/kbhotfix 假设没有cookie,则会出现两个按钮:

  • 我接受
  • 我不接受

使用PowerShell的Invoke-WebRequest,我如何点击"我接受了?

使用网络上的各种示例,我一直尝试以下各种变体:

$baseUri = "https://support.microsoft.com"
$uri = $baseURI +"/en-us/hotfix/kbhotfix"

$Response = Invoke-WebRequest -Uri $uri -SessionVariable sv

$Response.forms[0].Action #= /en-us/Hotfix/KbHotfix

$Form = $Response.forms[0]
$form.fields["accept"] = "Accept"

$MainPage = Invoke-WebRequest -Uri ($baseUri + $Form.Action) -Method
$form.Method -Body $form.fields -WebSession $sv
$MainPage

但是当我执行" $ MainPage.forms [0] .Fields时,结果值是"我不接受"或者"我接受"对我来说,这表明它没有"点击我接受。

我是否需要调用onClick事件?

将非常感激地收到任何建议/例子。

(PowerShell V5)

1 个答案:

答案 0 :(得分:0)

您只需添加额外的Cookie:

$cookie = New-Object System.Net.Cookie("hotfixEulaCookie", "1", "/", "support.microsoft.com")
$sv.Cookies.Add($cookie)

我认为你甚至不需要第一个请求。只需创建一个WebRequestSession变量并将其添加到其中即可。

将来如何解决这些问题:

  • 使用网络浏览器的F12开发者工具查看交换和Cookie
  • 查看表单的HTML代码和脚本
  • 在Fiddler的请求作曲家中使用HTTP请求

这是表单在HTML中的外观:

<input class="eulabutton" id="cancel" name="cancel" onclick="onHotfixEulaAction('cancel', '/kb//')" type="button" value="I Do Not Accept" ms.cmptyp="button" ms.cmpnm="noacpt" ms.title="Donot Accept" ms.interactiontype="22">
<input class="eulabutton" id="accept" name="accept" onclick="onHotfixEulaAction('accept', '/hotfix/kbhotfix?kbnum=&amp;kbln=')" type="button" value="I Accept" ms.cmptyp="button" ms.cmpnm="acpt" ms.title="Accept" ms.interactiontype="22">

我们搜索onHotfixEulaAction并找到

https://az623152.vo.msecnd.net/cdnresources/2.38/common/script/gsfx/default.js

function onHotfixEulaAction(arg, url) {
    setcookieval("hotfixEulaCookie", (arg == "accept") ? '1' : '0', '', false);
    document.location.href = url;
}