Я разрабатываю стороннее приложение twitter. в то время как вы искали способ отправить веб-запрос, я нашел два класса: Windows.Web.Http.HttpClient
и System.Net.Http.HttpClient
.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
. Я получаю неправильный ответ.
(Но, когда я получить доступ к 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 не распаковал его. Вы можете проверять заголовки как запроса, так и ответа, правильно ли отправляются/получаются HTTP-заголовки, такие как Accept-Encoding или Content-Encoding. Вы также можете проверить, правильно ли работает System.Net.Http.HttpClient, потому что поддержка для него [была добавлена недавно в .NET Framework 4.6.2] (http://stackoverflow.com/a/38462037/1286670) –
@ Нуф, ты прав! 'HttpClient' не распаковывал данные ответа. поэтому я написал код немного больше. – Mystika