curl 阿里云接口返回http头信息处理;curl返回header头和body处理

踩坑来源:做地址智能解析接口的时候,按照快递官方提供的demo需要给curl指定头信息,发送后返回的却不是单纯的json字符串,而是包含了header和body两部分,饶了好久才处理掉,做笔记以备忘

未处理前的数据返回:

出现头信息是因为这么两句:

curl_setopt($ch, CURLOPT_HEADER, TRUE); //表示需要response header

处理方式:用curl自带的curl_getinfo()方法获取头的长度,然后使用substr来分割字符串,demo

 

public function curl_post($url,$method,$bodys){
$headers = array();
//根据API的要求,定义相对应的Content-Type
array_push($headers, "Content-Type".":"."application/x-www-form-urlencoded; charset=UTF-8");
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
if (1 == strpos("$".$host, "https://")){
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys);
$result = curl_exec($curl);
//对返回的结果进行字符串处理
if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == '200') {
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header = substr($result, 0, $headerSize);
$body = substr($result, $headerSize);
}
return $body;
}

本文由 我爱PHP169 作者:admin 发表,其版权均为 我爱PHP169 所有,文章内容系作者个人观点,不代表 我爱PHP169 对观点赞同或支持。如需转载,请注明文章来源。

发表回复