У меня есть следующий код C #:
Uri url = new Uri("http://lu32kap.typo3.lrz.de/mensaapp/exportDB.php?mensa_id=all");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.UserAgent.TryParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
var content = response.Content;
if(content != null)
{
string result = await content.ReadAsStringAsync();
if (result != null)
{
tblock.Text = result;
}
}
Каждый раз, когда я запускаю его, я получаю COMException «HRESULT E_FAIL».
Я смог отследить это частично. Это вызвано тем, что веб-сайт, с которого я пытаюсь получить свои данные, потому что, если я изменяю его на «https://www.google.de/» оно работает.
Это сбой в:
string result = await content.ReadAsStringAsync();
Тем не менее, мне нужно заставить его работать с этим сайтом, потому что он возвращает сгенерированный PHP объект json.
Есть ли способ это исправить?
Я запускал этот код локально, и в итоге я получил это исключение
Набор символов, предоставленный в ContentType, недопустим. Не могу прочитать
содержимое в виде строки с использованием неверного набора символов.
И похоже, что он возвращается UTF8
‘utf8’ не поддерживается имя кодировки. Для получения информации об определении
пользовательская кодировка, см. документацию для
Метод Encoding.RegisterProvider.
Можете ли вы убедиться, что вывод на сервере в правильном формате? Возможно, попробуйте этот ответ:
Разбор UTF8 JSON-ответа от сервера
Решение:
Это была проблема с кодировкой UTF8. Я смог построить небольшой обходной путь.
Благодаря Glitch100!
Uri url = new Uri("http://lu32kap.typo3.lrz.de/mensaapp/exportDB.php?mensa_id=all");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.UserAgent.TryParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
IHttpContent content = response.Content;
if(content != null)
{
IBuffer buffer = await content.ReadAsBufferAsync();
using (DataReader dataReader = DataReader.FromBuffer(buffer))
{
string result = dataReader.ReadString(buffer.Length);
if (result != null)
{
tblock.Text = result;
}
}
}