2012-02-21 1 views
1

HttpWebRequestでWebリクエストを送受信しています。HttpWebResponseコンテンツエンコード:ID

応答後、通常はgzipでコンテンツをエンコードします。 一部のコンピュータでは、デフレートエンコードが行われます。 一部の他のコンピュータでは、IDエンコードが受信されます。

私はそれがGZIPを読み、エンコーディングを収縮させるが、アイデンティティエンコーディングを読み取る方法が不明だし設定しています。

string ReturnString = ""; 

HttpWebRequest HttpWebRequest = (HttpWebRequest)WebRequest.Create(URL); 
HttpWebRequest.ProtocolVersion = Version.Parse("1.1"); 
WebHeaderCollection WebHeaderCollection = HttpWebRequest.Headers; 
HttpWebRequest.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
WebHeaderCollection.Add("Accept-Language: en-us"); 
WebHeaderCollection.Add("Accept-Encoding: gzip, deflate"); 
HttpWebRequest.KeepAlive = true; 
HttpWebResponse HttpWebResponse = (HttpWebResponse)HttpWebRequest.GetResponse(); 
using (var mem = HttpWebResponse.GetResponseStream()) 
{ 
    if (HttpWebResponse.ContentEncoding.ToLower().Contains("gzip")) 
    { 
     using (var gzip = new GZipStream(mem, CompressionMode.Decompress)) 
     { 
      using (var reader = new StreamReader(gzip)) 
      { 
       ReturnString = reader.ReadToEnd(); 
      } 
     } 
    } 
    else if (HttpWebResponse.ContentEncoding.ToLower().Contains("deflate")) 
    { 
     using (var gzip = new DeflateStream(mem, CompressionMode.Decompress)) 
     { 
      using (var reader = new StreamReader(gzip)) 
      { 
       ReturnString = reader.ReadToEnd(); 
      } 
     } 
    } 
} 
WebHeaderCollection ResponseHeaders = HttpWebResponse.Headers; 
HttpWebResponse.Close(); 

編集:別のPCが受信 「転送エンコードは:チャンク」と私はそれを読めば何のコンテンツのエンコーディングは、右のそれはコンテンツのエンコーディングを置き換えるべきではありません。 http://en.wikipedia.org/wiki/Chunked_transfer_encoding

どのような種類のエンコーディングも検出できませんか?

答えて

4

RFC

同一

デフォルト(同一性)をコードします。 変換なしの使用 何でも。このコンテンツコーディングは、Accept- エンコーディングヘッダーでのみ使用され、コンテンツコード化 ヘッダーでは使用しないでください。

あなたの編集については、チャンクされるレスポンスに気を付ける必要はありません。string resp = new StreamReader(response.GetResponseStream()).ReadToEnd()を使用すると、すべての応答データが得られるはずです。

+0

私はこれらの要求を受けているサーバーにアクセスできない。変更はサーバー側にする必要があると言っていますか? WebHeaderCollection.Add( "Accept-Encoding:gzip、deflate、identity");あるいは次のようなものがあります: – Untouchable

+0

@Untouchableあなたの質問を理解する限り:IDエンコーディングが適用されたレスポンスボディを受け取った場合、_no_他のエンコーディングが適用されており、安全にデフォルトのエンコーディングを引き継ぐことができます。 – CodeCaster

+0

おかげさしでお手伝いします。 – Untouchable

関連する問題