2012-01-30 22 views
2

晚上好!PHP:在正常的网络浏览器上使用已登录的cURL会话

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

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

所以我尝试了很多选择。他们都没有工作。

模式:在本地服务器上

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

那该怎么办?

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

不起作用。

2)通过Ajax调用最后的document.cookie =尝试同样的事情...

不工作。

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

不起作用。

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

不起作用。

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

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

请给我一只手!

谢谢!

+0

也许我需要更彻底地阅读,但您是否尝试了** CURLOPT_FOLLOWLOCATION ** [CURL选项](http://us.php.net/manual/en/function.curl-setopt.php)? – quickshiftin 2012-02-01 02:21:50

回答

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); 

返回一个字符串,这是更为用于调试或解析。

相关问题