C#: Обработка WebClient "нарушение протокола"
Мне нужно прочитать местоположение в моем маршрутизаторе, но я получаю следующее исключение -
ServerProtocolViolation "The server committed a protocol violation.
Section=ResponseHeader Detail=CR must be followed by LF"
Это происходит, когда я использую .DownloadString(url)
функция. Есть ли способ сделать WebClient
игнорировать нарушение протокола? Поиски в Google говорят мне, что я должен установить useUnsafeHeaderParsing
вариант где-то. Могу ли я сделать это через программу? В чем подвох, если я его использую?
Изменить: Присоединение кода -
public Readlog() {
WebClient wc = new WebClient();
string url = @"http://192.168.0.1/setup.cgi?next_file=log.htm&todo=cfg_init";
Console.WriteLine(url);
try {
//wc.Headers.Add("User-Agent", "Mozilla/5.0(Windows; U; Windows NT 5.2; rv:1.9.2) Gecko/20100101 Firefox/3.6");
wc.Credentials = new NetworkCredential("admin", "admin");
//Next line causes exception System.Net.WebException
//Message - "The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF"
//May be I need to use useUnsafeHeaderParsing somehow to avoid that
string result = wc.DownloadString(url);
Console.WriteLine(result);
} catch (WebException we) {
System.Diagnostics.Trace.WriteLine(we.ToString());
}
}
2 ответа
Похоже, самый простой способ - включить в приложение файл.config, содержащий следующее:
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing = "true"/>
</settings>
</system.net>
Тем не менее, это также возможно сделать в коде, но это выглядит немного грязно:
Также обратите внимание, что MSDN определение этого свойства
Установка этого свойства игнорирует ошибки проверки, возникающие при разборе HTTP.
Так что я бы сказал, что он довольно безопасен в использовании, хотя в нем упоминается только его использование для обратной совместимости.
У меня была эта проблема в моем собственном веб-сервере, в шапке я изменил
HTTP/1.x 200 OK
в
HTTP/1.0 200 OK
теперь это работает, когда я использую браузер (chorome или...) или в WebClient (C#)