PowerShell Invoke-Webrequest与网站不兼容?

时间:2016-10-15 00:21:15

标签: powershell

我已经看过许多Invoke-Webrequest的例子,我自己已经取得了一些成功,但是,无论我尝试什么,我尝试自动登录的一个网站都没有用。这是代码:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # This is required so that HTTPS requests won't fail with Invoke-WebRequest
$r = Invoke-WebRequest -Uri https://order.swisschalet.com -SessionVariable sc
$r.forms[0].fields['form-login-header-email'] = "MyEmail"
$r.forms[0].fields['form-login-header-password'] = 'MyPassword'
$a = Invoke-WebRequest -Uri ("https://order.swisschalet.com" + $r.forms[0].Action) -WebSession $sc -Method POST -Body $r.forms[0]

我曾尝试使用Fiddler 4来分析发生了什么,但它只让我更加困惑。当我手动访问网站时,Fiddler会显示已发布的“电子邮件”和“密码”字段,而不是最初以“form-login-header-email”和“form-login-header-password”形式返回的字段。但是,即使我尝试创建这些新字段并POST它们仍然无法正常工作。 Fiddler表示手动访问网站还会创建一种称为“org.codehaus.groovy.grails.SYNCHRONIZER_TOKEN”的同步令牌。

我开始怀疑Invoke-WebRequest是否与此站点完全不兼容,因为我无法获得预期的响应,我可以在$ a.parsedHTML.DocumentElement.InnerText中找到我的名字。相反,当我查看此内容时,我只需返回完整页面,告诉我我的会话已经过期。

我开始尝试使用IE Com对象,但这似乎也没有用。我错过了什么或者只是这个网站的制作方式?我几天都在努力解决这个问题(实际上只是为了学习)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果您发送的内容发送到它发送的地方,您就会登录:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # This is required so that HTTPS requests won't fail with Invoke-WebRequest
$r = Invoke-WebRequest -Uri https://order.swisschalet.com -SessionVariable sc
$form = @{
    delegate='login'
    id='null'
    mode='save'
    target='#form-login'
    email='email@example.com'
    password='password'
}
$a = Invoke-WebRequest -Uri "https://order.swisschalet.com/order/auth/index" -WebSession $sc -Method POST -Body $form

它说

<span class="welcome-back">Welcome, <span class="username">TestingSome StuffForStackOverflo</span>
$a.RawContent结果中的

。所以我想这并不是不相容的。

相关问题