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>

Тем не менее, это также возможно сделать в коде, но это выглядит немного грязно:

http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/ff098248-551c-4da9-8ba5-358a9f8ccc57

Также обратите внимание, что MSDN определение этого свойства

Установка этого свойства игнорирует ошибки проверки, возникающие при разборе HTTP.

http://msdn.microsoft.com/en-us/library/system.net.configuration.httpwebrequestelement.useunsafeheaderparsing.aspx

Так что я бы сказал, что он довольно безопасен в использовании, хотя в нем упоминается только его использование для обратной совместимости.

У меня была эта проблема в моем собственном веб-сервере, в шапке я изменил

HTTP/1.x 200 OK

в

HTTP/1.0 200 OK

теперь это работает, когда я использую браузер (chorome или...) или в WebClient (C#)

Другие вопросы по тегам