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

时间:2017-01-12 16:16:55

标签: powershell curl uri

使用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字节的有效负载。

在Google 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:\Tools\curl>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:\Tools\curl>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工作"引擎盖下#34;使用IE DLL)和#34;沙漏&# 34;在所请求的URI的选项卡旁边也永久运行。

再次提出我的问题:这个问题与Powershell中的bug有关,还是可能是其他问题?

1 个答案:

答案 0 :(得分:1)

我正在排除我自己同样性质的情况。我的网站似乎改变了一些东西。其中一个是表格。

您能否确认您的网站有FORMS选项?

EX。

ObservableCollection<string>

请注意,我使用-UseBasicParsing。对于我的nytimes例子,我必须。这是因为nytimes正在使用JS并且似乎并没有很好地回归PS。删除-UseBasicParsing将导致我的WebRequest挂起。

你会注意到,通过上面的回复,&#39; FORMS:&#39;是空的。

现在我没有解决方案。除此之外,我的网站显然需要凭据,我显然需要提供。所以我现在正在使用-Body $ bodyParam @ {}和-Headers $ headerParams @ {}编写不同尝试的调整。到目前为止,它无济于事。

简而言之,PS似乎并不适用于JS类型的网站,而且FORMS似乎只用于特定的网站集,而不是用于所有类型的网站。

希望有更多技术人员可以提供帮助,因为这会让我的大脑陷入困境。

相关问题