是否需要在我的情况下解码curl结果?

时间:2016-09-21 09:55:10

标签: php curl php-curl

我创建了php curl来发送xml请求,如下所示,登录似乎正常。因为如果登录详细信息有任何错误,那么它会显示错误。但如果一切正常,那么它会给出一些垃圾值的响应:

源代码:

$contentlength=strlen($postdata);

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL =>$this->url ,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "$postdata",
    CURLOPT_HTTPHEADER => array(
        "Content-Type: text/xml;charset=utf-8",        
        "Content-Length: 839",
        "Accept: text/xml",
        "Accept-Encoding: gzip",
        "Authorization : $Authorization",
        "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11",
        "Host: $host",
        "Connection: close" 

    ),
));

Ouput看起来像这样:

‹d1oÂ0…÷üŠS–,Û)J›ÈuèÔ"$–²šäH£Æv°MUþ}MÒ€J·»{ŸŸï_}«¾ÐºÖèeÂæ4Ô•©[Ý,““?¤OÉJDÜ¢ëv¸ïLõyåã‡yþ‹ Ç:oñ€6 x

有什么不对?我应该解码什么?如果是,那么我需要调试forgat。我使用securetrading.com网站发送xml请求。

2 个答案:

答案 0 :(得分:1)

简单地说,您必须从CURLOPT_HTTPHEADER数组中删除"Accept-Encoding: gzip"

如果仍然无效,请使用gzdecode()函数

解压缩输出
$original_output= gzdecode($curl_output);

要解决内容长度问题,您必须计算已经计算并存储在$contentlength变量中的帖子数据的字符串长度。

"Content-Length:".$contentlength

答案 1 :(得分:0)

curl_setopt($curl, CURLOPT_ENCODING , "gzip");

将正确显示结果