Что вызывает WinHttpException: сервер вернул недопустимый или нераспознанный ответ в HttpClient?

ПРОБЛЕМА:

Я пытаюсь получить доступ к данным с удаленного сервера Bugzilla, используя REST API Bugzilla. Когда я жду ответа от HttpClient.GetAsync, выдается это исключение.

ЧТО Я ПОПРОБОВАЛ:

Чтобы понять причину исключения, я исследовал следующие вопросы SO и проблемы GitHub:

ОСНОВНОЙ КОД:

Целью приведенного ниже кода является получение версии сервера для Bugzilla по адресу _url_version. Например, если я установил _url_version = "https://bugzilla.mozilla.org/rest/version", я получаю правильный ответ.

// Get version, dummy test to ensure REST API is working via http requests
public async Task<string> GetVersion()
{
    using (var client = new HttpClient())
    {
        HttpResponseMessage response = await client.GetAsync(_url_version);
        string json = await response.Content.ReadAsStringAsync();
        return JsonConvert.DeserializeObject<Rootobject>(json).version;
    }
}

ВОПРОС:

В чем смысл этого исключения? Что могло вызвать разрыв связи между моим приложением и удаленным сервером Bugzilla?


person Murfcoder    schedule 12.03.2018    source источник
comment
Этот URL возвращает ответ в формате gzip. См. Распаковка потока GZip из ответа HTTPClient   -  person Alex K.    schedule 12.03.2018
comment
@AlexK Я преобразовываю ответ в объект. Для примера URL сериализация работает нормально. Проблема на самом деле заключается в получении ответа с другого URL-адреса.   -  person Murfcoder    schedule 12.03.2018
comment
Извините, я пропустил рабочий бит. Вы пробовали отслеживать: https://stackoverflow.com/questions/18924996/logging-request-response-messages-when-using-httpclient   -  person Alex K.    schedule 12.03.2018
comment
Я закружу и посмотрю, что найду. Спасибо, Алекс.   -  person Murfcoder    schedule 12.03.2018
comment
@AlexK Здесь соответствующая трассировка исключения. Есть предположения?   -  person Murfcoder    schedule 12.03.2018


Ответы (1)


Покопавшись, мне удалось решить эту проблему, обновив Bugzilla до версии 5.0.4.

КОРНЕВАЯ ПРИЧИНА:

Используя Curl, я смог вручную проверить заголовки из ответа HTTP (здесь). Исключение составлял шум в ответе:

Bugzilla.pm:sysread () устарела в: utf8 handles. Это будет фатальной ошибкой в ​​Perl 5.30 в C: / ...

По какой-то причине эта проблема с модулем perl повторялась на стороне сервера.

РЕШЕНИЕ:

Согласно примечаниям к выпуску Bugzilla 5.0.4, проблема заключалась в решено. Я обновил свою установку Bugzilla, и REST API работал должным образом.

Надеюсь, это кому-то поможет!

person Murfcoder    schedule 20.03.2018