2

POST データが送信された後に結果を返す API があります。

現在、私は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 ではまったく動作しませんでした。

他の提案の1つに従って、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 に答える