PHP:在普通的Web浏览器上使用登录的cURL会话

时间:2012-01-30 17:22:38

标签: php json session redirect curl

晚上好!

我在PHP中有一个脚本,它对远程主机登录页面进行CURL调用。 登录并通过cookiejar opt和cookiefile opt保持会话后,我使用相同的CURL连接处理程序登录到即时下一页需要上传。 当它完成后,我得到了完整的会话参数,我可以从网站上调用我想要的任何页面,但是IN CURL!

这个想法是,这个脚本使用CURL,需要最终使用CURL会话重定向到远程主机中的一个页面,但这是不可能的,因为从curl你不能将结果显示为重定向页面。

所以我尝试了很多选择。没有一个人可以工作。

架构:

  • 本地服务器上的PHP脚本。
  • 致电domain.com/loggin.php(创建curl ch)
  • 在cookie.txt文件上保持curl会话。
  • 使用相同的ch(非关闭的最后一个)调用domain.com/loggin_2.php。
  • 完全登录远程站点。
  • 返回PHP脚本。需要重定向到domain.com/index.php,需要使用完整登录过程填充Session变量。

该怎么做?

1)完成登录后,读取cookies.txt文件以获取PHPSESSID。 然后尝试使用setcookie()或通过标题(“Set-cookie:...”)并立即使用标题(“Location:domain.com/index.php”)。

不起作用。

2)通过ajax调用尝试了同样的事情,最后是document.cookie = ...

不起作用。

3)向我的远程主机中的文件添加第三个cURL调用,打印JSONED $ _SESSION。 在我的PHP脚本上获取它,解码它并通过foreach在任何数组值上加载到我的本地会话上(foreach()... $ _ SESSION [$ c] = $ v)。 在此foreach之前添加了session_start()。接下来是一个标题(“Loaction:domain.com/index.php”)。

不起作用。

4)在标题之前添加了session_write_close()(“Loaction:domain.com/index.php”)。

不起作用。

所以我真的不知道如何使用CURL会话。

我尝试通过Web Developer Firefox插件手动修复PHPSESSID。我写下了curl生成的会话ID。它完美的作品。所以,应该可以通过脚本在我的PHP脚本上修复它!但我不能!

请帮帮忙!

谢谢!

1 个答案:

答案 0 :(得分:0)

我可能已经迷失了一点,但我想我明白了。 您可以使用 用于某些调试的CURLOPT_HEADER(将包含当前重定向的页面信息) 和CURLOPT_FOLLOWLOCATION一样:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://domain.com/login.php');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

我也用

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

以字符串形式返回,这对于调试或解析更有用。