2017-02-16 8 views
0

私はTwitterサードパーティアプリケーションを開発しています。 Webリクエストを送信する方法を探しているうちに、Windows.Web.Http.HttpClientSystem.Net.Http.HttpClientという2つのクラスが見つかりました。Windows.Web.Http.HttpClientとSystem.Net.Http.HttpClientは異なる応答を受け取ります

どちらのクラスも大きな違いはないようですが、同じリクエストでは非常に異なるエスカレーションを受けます。

Windows.Web.Http.HttpClientでリクエストを送信するとうまく動作します。

public async Task<string> Request(Method method, string url, string postData) 
{ 
    var http = new Windows.Web.Http.HttpClient(); 
    Windows.Web.Http.HttpResponseMessage response; 

    if (method == Method.POST) 
    { 

     var httpContent = new Windows.Web.Http.HttpStringContent(postData, Windows.Storage.Streams.UnicodeEncoding.Utf8); 
     httpContent.Headers.ContentType = Windows.Web.Http.Headers.HttpMediaTypeHeaderValue.Parse("application/x-www-form-urlencoded"); 
     response = await http.PostAsync(new Uri(url), httpContent); 
    } 
    else 
    { 
     response = await http.GetAsync(new Uri(url)); 
    } 

    return await response.Content.ReadAsStringAsync(); 
} 
しかし、私は System.Net.Http.HttpClientとのリクエストを送信した場合。私は間違った反応を受けます。

(しかし、私は、WebブラウザでリクエストされたURLにアクセスすると、それは下の画像を好きでもない作品)

public async Task<string> Request(Method method, string url, string postData) 
{ 
    var http = new System.Net.Http.HttpClient(); 
    System.Net.Http.HttpResponseMessage response; 

    if (method == Method.POST) 
    { 

     var httpContent = new System.Net.Http.StringContent(postData, Encoding.UTF8, "application/x-www-form-urlencoded"); 
     response = await http.PostAsync(new Uri(url), httpContent); 
    }else 
    { 
     response = await http.GetAsync(new Uri(url)); 
    } 


    return await response.Content.ReadAsStringAsync(); 
} 

これはなぜ違うのですか?どうすればこの問題を解決できますか?

+1

System.Net.Http.HttpClientのスクリーンショットは、圧縮されている可能性がありますが(gzip)、HttpClientは圧縮解除していないようです。 Accept-EncodingやContent-EncodingなどのHTTPヘッダーが正しく送受信されているかどうかを、要求と応答の両方のヘッダーで確認できます。また、System.Net.Http.HttpClientがHTTP2を正しく実装しているかどうかを確認することもできます。これは、[.NET Framework 4.6.2]に最近追加されたためです(http://stackoverflow.com/a/38462037/1286670) –

+0

@あなたは正しい! 'HttpClient'は応答データを解凍しませんでした。だから私はもう少しコードを書いた。 – Mystika

答えて

0

問題はHttpClientで、Nufがコメントで述べたようにgzipデータを解凍しなかったことです。

だから、私はgzip解凍用の小さなコードを書いたばかりです。

関連する問題