重定向&连续的POST请求

时间:2013-09-20 18:43:02

标签: php post redirect

我通过以下方式提交登录表单:

$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&amp;ui_translation=off&amp;gbrowsertype=">

3 个答案:

答案 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网页抓取。