使用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似乎只用于特定的一组网站,而不是所有类型的网站。
希望有更熟练的人能帮忙,因为这让我很头疼。