虽然这个问题很老,并且接受的响应是有效的,但我发现它有点不适应,因为HTTP响应的内容(HTML、XML、JSON、二进制或其他什么)会与标头混合。
我找到了另一种选择。curl提供了一个选项(CURLOPT_HEADERFUNCTION)来设置将为每个响应头行调用的回调。该函数将接收curl对象和带有标头行的字符串。
您可以使用这样的代码(改编自TML响应):$cookies = Array();$ch = curl_init('
// Ask for the callback.curl_setopt($ch, CURLOPT_HEADERFUNCTION, "curlResponseHeaderCallback");
$result = curl_exec($ch);var_dump($cookies);function curlResponseHeaderCallback($ch, $headerLine) {
global $cookies;
if (preg_match('/^Set-Cookie:\s*([^;]*)/mi', $headerLine, $cookie) == 1)
$cookies[] = $cookie;
return strlen($headerLine); // Needed by curl}
这个解决方案的缺点是使用全局变量,但我想这不是短脚本的问题。如果curl被包装到类中,则始终可以使用静态方法和属性。