在php中使用Curl时读取Cookie,如何?

时间:2012-03-15 05:16:44

标签: php curl

我正在连接到使用Cookie对用户进行身份验证的API服务。 我从命令提示符处创建了这两个语句,它可以正常工作。

curl -d "u=username&p=password" -c ~/cookiejar https://domain/login

curl -b https://domain/getData

现在我想使用curl制作两个等效的php文件 login.php get_data.php

我正在使用

curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
login.php

中的

curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
get_data.php

中的

它不起作用。 Cookie文件正在创建,但第二个curl没有读取它。 这是正确的方法吗?我是否必须单独阅读cookie文件并设置标题Cookie?任何帮助将不胜感激。感谢。

3 个答案:

答案 0 :(得分:14)

这样就可以了。我以Google.com为例运行它:

<?PHP

// open a site with cookies
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0');
curl_setopt($ch, CURLOPT_HEADER  ,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$content = curl_exec($ch);

// get cookies
$cookies = array();
preg_match_all('/Set-Cookie:(?<cookie>\s{0,}.*)$/im', $content, $cookies);

print_r($cookies['cookie']); // show harvested cookies

// basic parsing of cookie strings (just an example)
$cookieParts = array();
preg_match_all('/Set-Cookie:\s{0,}(?P<name>[^=]*)=(?P<value>[^;]*).*?expires=(?P<expires>[^;]*).*?path=(?P<path>[^;]*).*?domain=(?P<domain>[^\s;]*).*?$/im', $content, $cookieParts);
print_r($cookieParts);

?>

请参阅other examples了解如何有效地解析字符串。

答案 1 :(得分:3)

  

是否有任何方法可以查看curl请求标头。我可以从curl实例中获取它吗?或者有没有像Mac的fiddler这样的工具(我正在使用Mac OS)?

是的,您可以使用以下内容获取请求标头:

<?php
  ...
  curl_setopt($ch, CURLINFO_HEADER_OUT, true); // enable tracking
  $result = curl_exec($ch);
  var_dump(curl_getinfo($ch, CURLINFO_HEADER_OUT)); // request headers
?>

答案 2 :(得分:0)

在PHP 5.5.0中,您现在可以在一行中获取cookie但我只使用PHP 7.1.0返回一个空数组:

  

CURLINFO_COOKIELIST - 获取所有已知的Cookie

$cookies = curl_getinfo($curl, CURLINFO_COOKIELIST);