0

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

$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=">
4

3 回答 3

0

如果您正在捕获帖子(用户名/密码),那么您通常会使用 PHP 加载页面,如下所示:

header("Location: /homepage");

但是从您的示例来看,您似乎在处理登录时混淆了客户端和服务器端。看看这里的简单代码:http: //php.thedemsite.co.uk/logincode.php 它应该会有所帮助。

于 2013-09-20T18:55:17.203 回答
0

你想做两件事:

1)你想去“下一页”。您可以通过查找元刷新标记并转到目标 URL 来执行此操作。您可以使用简单的正则表达式从元刷新标签的内容中获取 URL。

2)你想让下一页识别你已经登录。如果这是一个普通的webapp,那么你需要解析原始请求中进来的Set-Cookie: headers,并将它们变成你发送的Cookie: headers当您请求下一页时。

如果您想进一步从下一页链接,您可能还需要寻找跨站请求伪造安全令牌,许多Web应用程序框架放入页面数据,并且您必须在发布时提供回来,以防某些基于浏览器的会话劫持攻击。

请注意,并非每个站点都会在登录后进行元刷新——HTTP 应用程序的凭据实际上并没有标准化(因为通常不使用 Web 授权标头。)如果您想对一堆不同的站点做很多事情,您最好希望这些站点具有某种编程 API,而不是诉诸 HTTP 网页抓取。

于 2013-09-20T23:33:17.187 回答
0

实际上你不能重定向然后POST。

请参阅Post/Redirect/Get模式:这就是您应该尝试实现登录页面的方式。

于 2013-09-20T18:47:30.167 回答