因此,其他公司的一些人认为,如果不使用soap或xml-rpc或rest或任何其他合理的通信协议,而只是将所有响应作为cookie嵌入到报头中,那就太棒了。
我需要从这个curl响应中取出这些cookie,希望它是一个数组。如果我不得不为此浪费大量的时间来编写解析器,我会非常不高兴。
有没有人知道如何简单地做到这一点,最好不向文件中写入任何内容?
如果有人能帮我解决这个问题,我将不胜感激。
发布于 2009-05-21 23:55:43
$ch = curl_init('http://www.google.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// get headers too with this line
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
// get cookie
// multi-cookie variant contributed by @Combuster in comments
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches);
$cookies = array();
foreach($matches[1] as $item) {
parse_str($item, $cookie);
$cookies = array_merge($cookies, $cookie);
}
var_dump($cookies);
发布于 2014-08-03 03:50:29
尽管这个问题已经很久了,而且接受的响应也是有效的,但我还是觉得有点不舒服,因为HTTP响应的内容(HTML、XML、JSON、二进制或其他任何格式)与报头混合在一起。
我找到了一个不同的选择。CURL提供了一个选项(CURLOPT_HEADERFUNCTION
)来设置将为每个响应标头行调用的回调。该函数将接收curl对象和带有标题行的字符串。
您可以使用如下代码(改编自TML响应):
$cookies = Array();
$ch = curl_init('http://www.google.com/');
// 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被包装到一个类中,则可以始终使用静态方法和属性。
发布于 2011-08-25 00:49:54
这不需要正则表达式,但需要PECL HTTP extension。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
curl_close($ch);
$headers = http_parse_headers($result);
$cookobjs = Array();
foreach($headers AS $k => $v){
if (strtolower($k)=="set-cookie"){
foreach($v AS $k2 => $v2){
$cookobjs[] = http_parse_cookie($v2);
}
}
}
$cookies = Array();
foreach($cookobjs AS $row){
$cookies[] = $row->cookies;
}
$tmp = Array();
// sort k=>v format
foreach($cookies AS $v){
foreach ($v AS $k1 => $v1){
$tmp[$k1]=$v1;
}
}
$cookies = $tmp;
print_r($cookies);
https://stackoverflow.com/questions/895786
复制相似问题