如何使用PHP cURL登录到远程站点,然后重定向到该站点

时间:2010-09-09 11:31:37

标签: php cookies curl

我已经从几个方面看到了这个问题,但找不到有效的答案。

我创建了一个使用PHP / cURL登录到基于.NET的远程站点的页面。尽可能地工作 - 我可以通过curl_exec从登录页面获取数据,并使用它做任何事情,但我真正需要做的是将用户重定向到该页面。只需重定向就可以在远程站点上找到一个已注销的页面。我知道答案是获取cURL登录时返回的cookie,然后在第二次调用时传递它。 。 。不知何故。我确定某人必须这样做并且可以提供一个有效的例子。请帮忙 - 这让我疯了!

谢谢,

标记

3 个答案:

答案 0 :(得分:2)

难怪你找不到有效的答案 这不可能。

答案 1 :(得分:1)

问题是登录将来自您的PHP服务器,而不是来自最终用户的IP地址,因此当您重定向用户时,该站点可能不会看到它们已登录。

您可以设置诸如将提供给PHP服务器登录的cookie传递给最终用户之类的东西,但是如果重定向的网站写得更好,那么它就不会落空。

如果您完全控制两个站点并且可以访问彼此的其他数据库,则可以编写一些后端代码,以便PHP服务器告诉.net站点期望传入的用户;这可能有用。但是你需要在两个系统中做一些后端工作。

如果您没有.Net站点的后端访问权限,那么我可以看到的唯一方法就是使用PHP站点作为.Net站点的完整代理 - 即而不是进行重定向,只需通过PHP直接显示.net站点的输出。但是,这会产生与之相关的各种其他问题。

答案 2 :(得分:-1)

如果网站使用cookies,您可以使用cURL。

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, "User=$user&passwd=$passwd");
curl_setopt ($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);

$header = curl_exec($ch);

if (preg_match("/set-cookie:(.*)\n", $header, $m)) {
  $cookies = preg_replace('/(expires|path|domain)=[^;]*;?/i', '', $m[1]);
  header("Cookies: " . $cookies);
  header("Location: $url");
}

这应该可行,但我不测试它。