0

所以我使用 cURL 从第 1 页获取数据,从中获取信息并将其存储在一个数组中。下一步是加载下一页,我通过创建一个具有相同 cookiejar 和 cookiefile 的新 cURL 来完成此操作。我正确地看到了第 1 页,但第 2 页显示:找不到会话。会话可能已过期。通过查看标题信息,我看到在第 1 页中它设置了 cookie WCOOKIE=rd244o00000000000000000000ffff912c10f5o80。
在第 2 页的标题中,它设置了 cookie WCOOKIE=rd244o00000000000000000000ffff912c10f6o80。
所以这就是为什么它认为会话已过期,它不加载 cookie 但页面试图重写它。所以我的问题是:我必须怎么做才能让第 2 页加载第 1 页设置的 cookie,而不是尝试设置新的 cookie?

附加信息:两个页面的加载都发生在一个文件(1.php)中,因为我需要将两个数据都存储在 1 个数组中,并且您需要第 1 页的 cookie 才能请求第 2 页。

两个页面都设置为使用标题:

$headers[] = "Accept: */*";  
$headers[] = "Connection: Keep-Alive";  
$headers[] = "Content-type: application/x-www-form-urlencoded;charset=UTF-8";  

加载第 1 页:

$cSession = curl_init(); 
$tmpfname = dirname(__FILE__).'/cookie.txt';
curl_setopt($cSession, CURLOPT_COOKIEJAR, $tmpfname);
curl_setopt($cSession, CURLOPT_COOKIEFILE, $tmpfname);
curl_setopt($cSession, CURLOPT_HTTPHEADER,  $headers);
curl_setopt ($cSession, CURLOPT_COOKIESESSION, TRUE);

加载第 2 页:

$ch = curl_init ();
$tmpfname = dirname(__FILE__).'/cookie.txt';
curl_setopt($ch, CURLOPT_COOKIEJAR, $tmpfname);
curl_setopt($ch, CURLOPT_COOKIEFILE, $tmpfname);
curl_setopt($ch, CURLOPT_HTTPHEADER,  $headers);
curl_setopt ($ch, CURLOPT_COOKIESESSION, TRUE);  

这不是所有设置,但我猜我必须更改这些行中的某些内容,如果需要更多信息,请告诉我,我会发布它们。
非常感谢帮助:)

4

1 回答 1

1

好的,我终于修复了它,这要归功于这篇文章如何从 php curl 中获取 cookie 到变量中。我把它贴在这里给其他有同样问题的人。
首先,我在请求 1 中打开了 CURLOPT_HEADER。然后我使用以下代码获取 cookie:

preg_match('/^Set-Cookie:\s*([^;]*)/mi', $result, $m);
parse_str($m[1], $cookies);
$cookie = $cookies['NAMEOFCOOKIEUNEEDHERE']; 

那么我可以使用这个在请求 2 中传递这个 cookie:

curl_setopt($ch, CURLOPT_COOKIE, 'NAMEOFCOOKIEUNEEDHERE='.$cookie);

希望这可以帮助任何人

于 2013-11-13T11:56:48.893 回答