2

我有一个 API 在发送 POST 数据后返回结果。

目前我正在使用fopen。

我被告知,当发送正确的标头时,API 将返回 gzip 压缩结果。

如何使用 fopen 发送 Accept Encoding 标头?

目前,相关代码如下:

  $params = array('http' => array( 
     'method' => 'POST',
     'content' =>  $xml,
     'header'  => 'Content-type: application/x-www-form-urlencoded' . "\r\n",
     'ignore_errors' => $ignoreErrors
  )); 

  $ctx = stream_context_create($params); 
  $fp = fopen($url, 'rb', false, $ctx);

在 Google 中很容易找到的所有示例 / 等都与尝试读取始终为 gzip 压缩的流的人或希望设置标头以便发送压缩数据的人有关。

4

3 回答 3

3

我无法让它与 fopen/stream_get_contents 一起工作。

根据其他建议之一,我尝试了 CURL。

由于某种原因,以下方法均无效:

curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');

我还尝试了其他一些建议。

以下确实有效:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip'));
于 2013-06-11T13:37:39.737 回答
1

尝试添加一个空Accept-Encoding标题:

$params = array('http' => array( 
  'method' => 'POST',
  'content' =>  $xml,
  'header'  => 'Content-type: application/x-www-form-urlencoded' . "\r\n"
              .'Accept-Encoding:' . "\r\n"
  'ignore_errors' => $ignoreErrors
)); 

identity空值与不应该发生编码的含义相同。请参阅我已链接的 rfc。

但请注意,您不能确定远程服务器是否尊重这一点。

于 2013-06-10T12:18:43.437 回答
0

将“Accept-Encoding:gzip,deflate”添加到标头参数。而且您必须在那里连接可选标头才能将它们全部发送,目前您只是替换它们

于 2013-06-10T12:20:30.770 回答