Powershell命令Invoke-webrequest登录表单挂起



使用Powershell 5.0.10586.117,我想请求一个包含要登录的表单的特定网站(在IIS 8.5上)。以下是具体代码:

$Url = Invoke-Webrequest -Uri "https://not-work/hello.aspx" -SessionVariable SesVar
$UrlForm = $Url.Forms[0]

在这样做的时候,只要我不手动中断,Powershell就会挂起并且永远不会返回任何内容。

使用

$Url = Invoke-Webrequest -Verbose -Uri "https://not-work/hello.aspx" -SessionVariable SesVar

我可以看到以下错误:

VERBOSE:获取https://not-work/hello.aspx具有0字节有效载荷。

在谷歌Chrome 55.0.2883.87中运行同一网站是有效的。在另一个(可能是旧IIS)上使用旧版本的应用程序代码,它在Powershell中也能工作。

所以我想知道,这个问题是否与Powershell中的这个bug有关?

注意:即使使用

$Url = Invoke-Webrequest -UseBasicParsing -Verbose -Uri "https://not-work/hello.aspx" -SessionVariable SesVar

它失败了。

为了完整起见,curl还提供了一个HTTP状态代码200(类似于Chrome),但与工作版本相比有一些不同:

非工作网站

C:Toolscurl>curl -k https://not-work/hello.aspx -I HTTP/1.1 200 OK
Cache-Control: private 
Content-Length: 12671 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/8.5 X-AspNet-Version: 4.0.30319
Set-Cookie: __AntiXsrfToken=d438e79fe7004ad09d950a3b8b4e507d; path=/; HttpOnly
Set-Cookie: .ASPXAUTH=; expires=Mon, 11-Oct-1999 22:00:00 GMT; path=/; HttpOnly 
X-Powered-By: ASP.NET 
Date: Thu, 12 Jan 2017 13:57:33 GMT

工作网站

C:Toolscurl>curl -k https://works-well/hello.aspx -I HTTP/1.1 200 OK
Cache-Control: private  Content-Length: 12306 Content-Type: text/html; charset=utf-8  
X-Frame-Options: SAMEORIGIN 
X-Content-Type-Options: nosniff 
Server: WWW Server/1.1 X-XSS-Protection: 1; mode=block 
Set-Cookie: __AntiXsrfToken=6142de1c5d474da780530da39fea033f; path=/;HttpOnly; Secure
Date: Thu, 12 Jan 2017 15:56:47 GMT

顺便说一句,在Internet Explorer(IE)11.0.9600.18537中,像图像这样的对象没有加载(因为我相信Powershell使用IE DLL"在引擎盖下"工作),并且"沙漏"也在请求的URI的选项卡旁边永久运行。

所以,我的问题又来了:这个问题与Powershell中的这个bug有关吗?还是可能是其他原因?

我正在排除我自己的类似情况。我的网站似乎发生了一些变化。其中之一是表格。

你能确认你的网站有FORMS选项吗?

前任。

#GET WEBSESSION
$url = "https://myaccount.nytimes.com/"
$r = Invoke-WebRequest -Uri $url -SessionVariable ws -UseBasicParsing
return $r

请注意,我使用了-UseBasicParsing。对于我的nytimes示例,我必须这样做。这是因为nytimes使用的是JS,而这似乎对PS没有很好的回报。删除-UseBasicParsing将导致我的WebRequest挂起。

您会注意到,在上面的返回中,"FORMS:"为null。

现在我还没有解决方案。除此之外,我的网站显然需要证书,我显然需要提供。因此,我现在正在写一篇关于使用-Body$bodyParam@{}和-Headers$headerParams@{}进行不同尝试的文章。到目前为止都无济于事。

简单地说,PS似乎在JS类型的网站上表现不佳,FORMS似乎只用于特定的一组网站,而不是所有类型的网站。

希望有更熟练的人能帮忙,因为这让我很头疼。

最新更新