我只是想使用curl从网站上获取一些cookie,我已经阅读了数千个与此相关的主题,几乎在所有情况下,问题都与文件的路径有关(必须是绝对的)。
我尝试了几件事,但我找不到为什么我的cookie没有被写出来。给我代码:
$cookieDir = 'tmp/cookies.txt';
$options = Array(
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_URL => $url,
CURLOPT_COOKIEJAR => realpath($cookieDir),
CURLOPT_COOKIEFILE => realpath($cookieDir)
);
$ch = curl_init();
curl_setopt_array($ch, $options);
ob_start();
$data = curl_exec($ch);
ob_end_clean();
curl_close($ch);
一些注释:
- 文件存在
- realpath($cookieDir)是可写的
- 我正在顺利地获得$data中的网站
谢谢大家
是网站不允许我获取他们的cookie,为了获取它们,我不得不使用这个额外的参数让它认为我是一个普通的浏览器:
$header = array (
'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3',
'Connection: keep-alive'
);
然后在$options
$options = array (
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_URL => $url,
CURLOPT_COOKIEJAR => realpath($cookieDir),
CURLOPT_COOKIEFILE => realpath($cookieDir),
CURLOPT_HTTPHEADER => $header
);
尽管这是一个奇怪的情况,我希望它能帮助其他人=)
我认为您必须将CURLOPT_POST
选项设置为true才能获得cookie,以下对我有效:
$cookieDir = '<ABSOLUTE_PATH>/cookie.txt';
$options = array (
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_URL => '<URL>',
CURLOPT_COOKIEJAR => $cookieDir,
CURLOPT_COOKIEFILE => $cookieDir,
CURLOPT_POST => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$data = curl_exec($ch);
您还应该能够通过在请求中设置CURLOPT_HEADER
从标头中获取所有cookie:
$cookieDir = '<ABSOLUTE_PATH>/cookie.txt';
$options = array (
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_URL => '<URL>',
CURLOPT_POST => TRUE,
CURLOPT_HEADER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$data = curl_exec($ch);
// check the return value for `Set-Cookie` header
$cookies = array();
preg_match('/^Set-Cookie:'s*([^'r'n]*)/mi', $data, $cookies);
// $cookies[0] now contains any `Set-Cookie:` header