我通过以下方式提交登录表单:
$loginRequest = array(
'Username' => 'myUsername'
'Password' => 'myPassword'
);
$request = new HTTP_Request2($url, HTTP_REQUEST2::METHOD_POST);
$request->addPostParameter($loginRequest);
$response = $request->send();
POST成功,$ response
的输出为
</body>
<a id="refresh_url" href="/homepage">Loading...</a>
</body>
(至少在手动登录Chrome时)重定向到带有输入的另一个表单
<FORM name="autologin" method=POST action="https://homepage/AccountSettings">
<input type="hidden" name="Z" value="0,0">
我不确定如何让PHP以编程方式处理refresh_url
并重定向到/homepage
另外,我如何强制PHP提交最后一个表单呢?
修改
中间页面上还有以下元标记
<meta http-equiv="Refresh" content="0; URL=/vdesk/?langchar=en.iso-8859-1&ui_translation=off&gbrowsertype=">
答案 0 :(得分:0)
实际上你无法重定向然后发布。
请参阅Post/Redirect/Get模式:您应该尝试实施登录页面。
答案 1 :(得分:0)
如果您正在捕获帖子(用户名/密码),那么您通常会使用PHP加载页面,如下所示:
header("Location: /homepage");
但是从您的示例中,您似乎在处理登录时混淆了客户端和服务器端。看看这里的简单代码: http://php.thedemosite.co.uk/logincode.php 它应该有所帮助。
答案 2 :(得分:0)
你想做两件事:
1)你想进入“下一页”。您可以通过查找元刷新标记并转到目标URL来执行此操作。您可以使用简单的正则表达式从元刷新标记的内容中获取URL。
2)您希望下一页识别您已登录。如果这是一个普通的Web应用程序,那么您需要解析原始请求中的Set-Cookie:标头,并将它们转换为Cookie:标头您在请求下一页时发送的内容。
如果您想进一步关注下一页的链接,您可能还需要查找跨站点请求伪造安全令牌,许多Web应用程序框架放入页面数据,并且您必须在发布时提供回来,防范某些基于浏览器的会话劫持攻击。
请注意,登录后并非每个站点都会进行元刷新 - 实际上HTTP应用程序的凭据并未标准化(因为通常不使用Web授权标头。)如果您想要一堆完成很多不同的网站,你最好希望这些网站有某种程序化的API,而不是诉诸HTTP网页抓取。