php curl响应报文不完整

浏览:1658 发布日期:2019/01/18 分类:求助交流 关键字: php curl
### 问题描述
    head头的编码与body报文编码不一致,curl请求导致接收到的报文不完整

### 问题出现的环境背景

    比如某次对接过程中,对方返回的head头是gbk编码(Content-type: text/xml; charset=GBK),但是body里面的报文是UTF-8编码,导致返回的报文不完整

### 相关代码 function curl($url,$data = '',$header=null)
    {
        //初始化curl
        $curl = curl_init();
        //设置cURL传输选项
        if(is_array($header))
        {
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

        if (!empty($data)){//post方式
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        //获取采集结果
        $output = curl_exec($curl);
        $error = curl_errno($curl);
        //关闭cURL链接
        curl_close($curl);
        if($error){
            return $error;
        }else{
            return $output;
        }
    }
### 详细描述
    具体原因是因为GBK编码,一个中文字符是占用两个字节,而UTF-8编码一个中文字符是占用三个字节,curl请求响应回来的字符长度是按照GBK编码计算的,导致计算出来的报文字符长度是小于实际长度的,所以读取响应数据的时候,读到计算出来的长度时候就停止了,也就会出现返回的报文不完整情况

###解决方案:
    不采用curl方法进行请求,改用file_get_contents方法,因为file_get_contents不会返回head信息,所以不会出现编码不一致的情况
    
    **现在想问一下各位大神,curl方法有没有通过设置哪个参数可以解决这个问题?**
最佳答案
评论( 相关
后面还有条评论,点击查看>>