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


PHP: use logged-in cURL session on normal web browser

晚上好!

我有一个PHP脚本,它对远程主机loggin页面进行CURL调用。登录并通过cookiejar opt和cookiefile opt保持会话后,我使用相同的CURL连接处理程序登录到需要上传的下一个页面。完成后,我得到了完整的会话参数,我可以从网站上调用任何我想要的页面,但IN 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文件以获取PHPSSID。然后尝试使用setcookie(),或通过标头("setcookie:…"),然后立即使用标头("Location:domain.com/index.php")。

不起作用。

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

不起作用。

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

不起作用。

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

不起作用。

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

我尝试通过Web Developer Firefox插件手动修复PHPSSID。我写下了curl生成的会话id。它确实有效。所以,应该可以通过在我的php脚本上编写脚本来修复它!但我不能!

请帮我一把!

谢谢!

我可能有点迷路了,但我想我能理解。您可以使用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);

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