Я пытаюсь сделать HttpWebRequest удаленным датчиком с HTML-сервером на нем, чтобы отбросить данные.Как получить ответ, когда я получаю исключение ServerProtocolViolation?
Я думаю, проблема в том, что у веб-сервера есть некоторые проблемы с этим. Я могу получить веб-страницу для рендеринга в веб-браузере, и данные будут видны. Это данные, которые я хочу анализировать и хранить в реляционной базе данных.
Когда я смотрю заголовки ответов в Fiddler, я вижу, что он возвращает 500 Bad Response. Итак, я думаю, что это происходит, заголовки говорят, что Bad Response, но в том числе и действительная веб-страница.
Я не думаю, что смогу исправить веб-сервер. Я хотел бы просто захватить данные и проанализировать их. К сожалению объект Response имеет значение NULL.
Ошибка, вызванная выпуском WebExceptionStatus.ServerProtocolViolation, а в ветви catch ответ - null.
Что я могу сделать в этом сценарии?
UPDATE:
Другая проблема заключается в том, что нет HTML тегов. Ниже представлена сырой ответ от Fiddler:
HTTP/1.1 500 Fiddler - Bad Response
Date: Thu, 06 Aug 2015 18:13:27 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Cache-Control: no-cache, must-revalidate
Timestamp: 14:13:27.775
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="refresh" content="5"/>
<meta http-equiv="cache-control" content="no-cache">
<title>IQS WebServer</title>
<style type="text/css">
body {font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 0.8em;}
table {/*font-size: 0.8em;*/ /*font-family: monospace;*/}
.CaptionRow {font-weight:bold; background: #EFF3EB;}
.OddRow {background: #EFF3EB;}
</style>
</head>
И есть тело оттуда.
Я не знаю, почему его выбрасывает 500 и почему нет тега HTML, но мне все равно, насколько плохо сформирован ответ - я просто хочу получить ответ и обработать данные содержащихся внутри него, но библиотека не позволяет этого. Ответ является нулевым, и я, таким образом, застрял.
О, и я попытался установить KeepAlive = false. Я также попытался переключить ProtocolVersion на версии 10 и Версии11, и ничего не работает. Кажется, это обычные трюки, которые работают на других. – tnktnk
В WebException есть свойство Response. Я точно не помню, но может быть, что в условиях ошибок это будет где ответ. –
Правильно, поэтому, когда вы находитесь в ветке catch, вам нужно отбросить e.Response следующим образом: (HttpWebResponse) e.Response. Моя проблема в том, что ответ равен нулю. Этого просто нет. Кроме того, что это действительно так, но библиотека предпочла оставить его нулевым. – tnktnk