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

is it required to decode curl result in my case?

我创建了 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" 

    ),
));

输出如下所示:

‹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 请求。

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

将正确显示结果

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

如果仍然无法正常工作,请使用 gzdecode() 函数

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

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

"Content-Length:".$contentlength