因為業務需要,需要使用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
提交
取消