尝试使用PHP获取cookie';s CURL


Trying to obtain cookies with PHP's CURL

我只是想使用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);

一些注释:

  1. 文件存在
  2. realpath($cookieDir)是可写的
  3. 我正在顺利地获得$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