如何通过curl_setopt在php中创建gzip xml请求/响应

时间:2016-02-04 12:25:05

标签: php xml gzip

我正在使用php和curl_setopt来获取我的xml请求和响应。在代码i下面并使用它。但是我需要在我的请求中应用GZIP并且响应在GZIP中。

以下是我现在使用的代码。但是我的XML响应持有者说我没有发送GZIP请求。

plz更新我的下面的代码

$xml_request = '<customer>
        <product>computer</product>
        <request>
            <productid>1001</productid>
        </request>
    </customer>';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $request_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_ENCODING,'Accept-Encoding: gzip,deflate');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_request);
    $xml_response = curl_exec($ch);
    curl_close($ch);

1 个答案:

答案 0 :(得分:1)

如果你添加

curl_setopt($ch, CURLOPT_ENCODING, "");

它将使用自动支持的任何编码,包括gzip

要检查它是否正常工作,请在curl_exec调用后添加此代码:

$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($xml_response, 0, $header_size);
$body = substr($xml_response, $header_size);
在调用curl_exec之前

这段代码:

curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);

然后回显/ var_dump $ header以检查是否已使用gzip发送响应

所以调试代码应如下所示:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_ENCODING,'');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_request);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$xml_response = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($xml_response, 0, $header_size);
$body = substr($xml_response, $header_size);
curl_close($ch);

var_dump($header);