0
私はTwitterサードパーティアプリケーションを開発しています。 Webリクエストを送信する方法を探しているうちに、Windows.Web.Http.HttpClient
とSystem.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();
}
これはなぜ違うのですか?どうすればこの問題を解決できますか?
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) –
@あなたは正しい! 'HttpClient'は応答データを解凍しませんでした。だから私はもう少しコードを書いた。 – Mystika