4

我正在使用 cURL 来解析网站。

http://www.hcmiu.edu.vn/bookforsale/showbooks.php

它需要会话才能查看,如果您没有会话,则页面重定向到:

http://www.hcmiu.edu.vn/bookforsale/perInfo.php

我使用此代码获取会话 cookie,但我不知道为什么我看不到文件 cookies.txt 的任何更改

$urltopost = "http://www.hcmiu.edu.vn/bookforsale/perInfo.php";
$datatopost = array (
"name" => "abc",
"tel" => "99999999",
"email" => "abc@gmail.com",
"profession" => "abc",
"employer" => "abc",
"tel_work" => "99999999",
); 
$ch = curl_init($urltopost);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $datatopost);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookies.txt"); 

$returnData = curl_exec($ch);
$file = fopen("example.txt", "w");
fwrite($file, $returnData);
fclose($file);
curl_close($ch);

但是,我看到:

Set-Cookie: PHPSESSID=1egb993objkrdp3gi5mpvs02g0; path=/ 

在标题中。谢谢你的帮助

-编辑:我使用了一个棘手的方法:我使用 http 查看器查看浏览器 cookie 中的 PHPSESSID。然后我用它来创建一个 cookie 文件供 cURL 读取。然后我可以通过 web 服务器的会话检查来查看文件 showbooks.php 。

4

3 回答 3

3

我使用此代码片段从服务器的响应中提取 cookie:

$returnData = curl_exec($ch);
$cookie = '';
$pattern = '/Set-Cookie:(.*?)\n/';
if (preg_match($pattern, $returnData, $result))
$cookie = $result[1];

我在这篇文章中描述了我的经历。这种方法不使用 cookie 文件。


关于cookie 文件的问题,请考虑来自http://php.net/manual/en/book.curl.php的以下建议:

使用绝对路径设置变量 CURLOPT_COOKIEFILE 和 CURLOPT_COOKIEJAR。为了让生活更轻松,请使用 realpath("file.txt") 函数来获取绝对路径。

于 2010-10-05T10:59:06.073 回答
2

文件是可写的吗?它甚至存在吗?

于 2010-10-04T08:58:23.477 回答
2

尝试创建文件并赋予它全局读写权限。

还可以尝试使用相对路径(例如 ./cookies.txt)而不是 cookie jar 文件的绝对路径。

于 2010-10-04T09:14:02.453 回答