2012-01-31 4 views
5

Я пишу сканер портов для обнаружения веб-служб, работающих в локальной сети. Некоторые из этих веб-служб требуют базовой аутентификации - я не знаю имя пользователя/пароль для этих служб, просто хочу их перечислить, поэтому я не могу предоставить учетные данные на этом этапе. Я использую код:Как получить заголовки от ошибки сервера 401

    var request = (HttpWebRequest)WebRequest.Create("http://" + req); 
        request.Referer = ""; 
        request.Timeout = 3000; 
        request.UserAgent = "Mozilla/5.0"; 
        request.AllowAutoRedirect = false; 
        request.Method = WebRequestMethods.Http.Head; 

        HttpWebResponse response = null; 

        try 
        { 
         response = (HttpWebResponse) request.GetResponse(); 
         // I want to parse the headers here for the server name but as the exception is thrown the response object is null. 

        } 
        catch (Exception ex) 
        { 
         //401 error is caught here - response is null 
        } 

Я тогда разбор из имени сервера из заголовков, которые возвращаются, - я знаю, что они возвращаются, потому что я могу видеть их с стелькой, но объект HttpWebResponse установлен в null, поскольку метод GetResponse() генерирует исключение. В основном - как мне заставить его не бросать и исключать, а возвращать заголовки вместе с кодом состояния 401.

+0

У вас есть контроль над веб-сервисами? В частности, есть ли у вас контроль над их кодом? Более того, «сканер портов» не имеет ничего общего с HTTP, возможно, попробуйте использовать класс TCPClient. –

+0

нет у меня нет контроля над веб-сервисами - я ищу IP-камеры, поэтому я ищу специально для веб-серверов. Спасибо за предложение. – Sean

ответ

11

Если вы поймаете WebException, у вас будет доступ к ex.Response, и вы сможете получить оттуда свои заголовки.

+0

ПРИМЕЧАНИЕ. Это неопределенное поведение, на которое вы никогда не должны полагаться. –

+5

Какие источники говорят вам, что это не определено? Он полностью задокументирован. Вы можете ожидать ответ на все, кроме HTTP-тайм-аута или сбоя подключения ... http://msdn.microsoft.com/en-us/library/system.net.webexception.response.aspx – lukiffer

+0

Удивительный, спасибо lukiffer – Sean

Смежные вопросы