2010-11-02 2 views
0

В .NET/C# я хочу проверить некоторые html-коды. Например у меня есть следующий HTML:Неожиданное исключение при проверке кода XML

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    <head><title></title></head> 
    <body> 
    CDATA section number 1? 
    </body> 
</html> 

Я следующий C# код:

string htmlCode = ... // for instance the html above 
var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD }; 
settings.ValidationEventHandler += delegate(object s, ValidationEventArgs e) 
{ 
    throw new XmlException(e.Message); 
}; 
using (var srdr = new StringReader(htmlCode)) 
using (var xrdr = new XmlTextReader(srdr)) 
using (var vrdr = XmlReader.Create(xrdr, settings)) 
{ 
    try 
    { 
     while (vrdr.Read()) { } 
    } 
    catch (XmlException ex) 
    { 
     // do some stuff 
    } 
} 

, когда я запускаю этот код у меня есть это исключение:

System.Net.WebException : The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.GetResponse()

Что случилось в чем Я сделал? Заранее за вашу помощь

ответ

0

Код ответа, который вы получаете, представляет собой HTTP-код, указывающий, что вам запрещен доступ к ресурсу, который вы пытаетесь получить. Это может быть по ряду причин:

  1. Настройки сервера - сервер может запретить ВСЕ попытки доступа к ресурсу. Чтобы проверить это, попробуйте получить доступ к нему из браузера. Если вы получаете ту же ошибку в браузере, то, скорее всего, ваша проблема - это конфигурация сервера.

  2. Заблокированный пользовательский агент. Иногда доступ к ресурсу допускается только определенным пользовательским агентам. Это делается для того, чтобы предотвратить автоматическое сканирование сайтов на ресурсе. Если сайт, к которому вы обращаетесь, имеет файл robots.txt, есть вероятность, что ваша программа заблокирована.

  3. Требуется аутентификация. Если для доступа к серверу требуется аутентификация (например, базовый или дайджест-аут), вам необходимо предоставить учетные данные вместе с вашим запросом. Опять же, это можно проверить с помощью браузера. Если ресурс требует аутентификации, вы должны получить всплывающее окно в браузере с запросом информации о пользователе/​​пропуске.

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

1

Похоже, ваш код пытается загрузить с http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

, который возвращает 403 (попробуйте открыть его в браузере)

Примечание: ссылка Лусеро имеет объяснение, чтобы почему она возвращается 403

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