如何通过 curl_setopt 在 php 中制作 gzip xml request/response
How to make gzip xml request/response in php by curl_setopt
我正在使用 php 和 curl_setopt 来获取我的 xml 请求和响应。下面的代码 i 并为此使用。但是我需要在我的请求中应用 GZIP,并且响应来自 GZIP。
下面是我现在使用的代码。但是我的 XML 响应持有者说我没有发送 GZIP 请求。
请更新我下面的代码
$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);
如果你添加
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);
然后 echo/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);
我正在使用 php 和 curl_setopt 来获取我的 xml 请求和响应。下面的代码 i 并为此使用。但是我需要在我的请求中应用 GZIP,并且响应来自 GZIP。
下面是我现在使用的代码。但是我的 XML 响应持有者说我没有发送 GZIP 请求。
请更新我下面的代码
$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);
如果你添加
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);
然后 echo/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);