curl 返回http头信息处理;curl返回header头和body处理

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

未处理前的数据返回:

curl 返回http头信息处理;curl返回header头和body处理_第1张图片

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

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;
    }

 

你可能感兴趣的:(php开发过程中踩过的坑)