因为业务需要,需要使用curl 传输一段json数据,然后再获取响应首部中的响应行信息,(比如网站的Set-Cookie等),最后将Set-Cookie和对应的值组成数组返回,使用如下代码:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_HEADER => true, //输出header信息
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,//最大重定向次数 10次
CURLOPT_TIMEOUT => 3000,//超时设置3000s
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
),
));
$result = curl_exec($curl);
$return_result = $result;
$info = curl_getinfo($curl);
$httpHeaderSize = $info['header_size']; //header字符串体积
$pHeader = substr($result, 0, $httpHeaderSize); //获得header字符串
foreach(explode(PHP_EOL, $pHeader) as $item){//分隔得到的header字符串,拼接成响应行的数组
if(strstr($item, 'Set-Cookie:')){
$arr = explode('Set-Cookie:', $item);
$arr2 = explode('=', $arr[1] ,2);
$header_name = $arr2[0];#dump($header_name);
$header_value = explode(';', $arr2[1], 2)[0];
$set_header[] = [$header_name=>$header_value];
}
}
return $set_header;
但是问题是,获取到header信息,就无法发送json,我认为原因就是在:CURLOPT_RETURNTRANSFER => true 的设置上.请问各位大神,有什么好的方法,让curl()既发送json数据(post方式),又可以将响应行组成数组返回吗?谢谢大家了.
添加回答
举报
0/150
提交
取消