Herilane Ответов: 2

403 запрещенная ошибка при загрузке url-адреса в xdocument


Следующий код для загрузки RSS-файла отлично работал в течение нескольких недель в приложении, которое я собираю:

открытый класс RssFeedReader
{
public IEnumerable< post>; ReadFeed(string url)
{
var rssFeed = XDocument.Загрузить (url);

var posts = from item in rssFeed.Потомки (пункт)
выберите новый пост
{
Название = предмет.Элемент (название).Ценность,
Описание = предмет.Элемент(описание).Ценность,
// PublishedDate = item.значение элемента};

вернуть посты;
}
}
url-адрес в тестовом примере, который я использую, таков
http://www.news.com.au/national/rss

Ответ, который я получаю, таков::
"Исключение брошено: System. Net.WebException in System.dll "
и

"Дополнительная информация: удаленный сервер вернул ошибку: (403) запрещено."

Произошло исключение System.Net.WebException
Значение HRESULT=-2146233079
Сообщение=удаленный сервер вернул ошибку: (403) запрещено.
исходная система
Трассировка стека: в системе.Нет.Класса HttpWebRequest.Творческий()
Свойство innerexception:

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

Я взял этот фрагмент кода, не внес в него никаких изменений и написал небольшую программу b, которая вызывает его. Я использовал точно такой же url-адрес - и он отлично работает!

Так может быть, что-то неправильно настроено в основной программе?

Любая помощь очень ценится!

Что я уже пробовал:

Среди прочего, я поставил этот блок перед "var rssFeed" и запустил его:

Веб-клиент веб-клиент = новый Вебклиент();
служба WebClient.Заголовки.Добавить (user-agent, MyRSSReader / 1.0 ;);

XmlReader readers = XmlReader.Создание(веб-клиента.OpenRead(url));
ВАР XmlDocument объект = новый объект XmlDocument();
объект XmlDocument.Нагрузка (читатели);


и получил точно такую же ошибку 403, как и при попытке запустить "xmlDocument.Нагрузка (читатели); "

Я прочитал некоторые предложения по CodeProject об ошибке 403 и попытался использовать https вместо просто http: - это не удалось по другой (но понятной) причине:

Исключение: система.Безопасность.Идентификация.AuthenticationException в System.dll

Дополнительная информация: удаленный сертификат недействителен в соответствии с процедурой проверки.

2 Ответов

Рейтинг:
2

Mohtshm Zubair

иногда из-за обновления на стороне сервера, изменения разрешений для внутренней или новой папки, попробуйте снова дать разрешение на всю веб-папку следующим пользователям

= & gt; сетевая служба
=> IIS_IUSRS

Plz попробуйте дать разрешения вышеперечисленным пользователям


Herilane

Привет-я не понимаю, как проблема находится на стороне сервера. Это может быть - я просто не вижу, как в данный момент. Самая большая загадка для меня заключается в том, что код работал нормально в течение нескольких недель, а затем внезапно RSS-канал прекратился. Я изменил URL на несколько других-все с тем же отрицательным результатом. И прекрасно работает, если я создаю тестовый проект и вызываю его внутри. Кстати, это приложение WPF, которое я пишу, а не asp.net.

Рейтинг:
18

Richard Deeming

Этот сайт отфильтровывает запросы, которые не содержат заголовка агента пользователя. Вам нужно будет заменить var rssFeed = XDocument.Load(url); звоните с собой WebRequest вызов:

static XDocument LoadRss(string url)
{
    var request = (HttpWebRequest)WebRequest.Create(url);
    request.UserAgent = "(Anything other than an empty string)";
    
    using (var response = request.GetResponse())
    using (var stream = response.GetResponseStream())
    {
        return XDocument.Load(stream);
    }
}

public IEnumerable<Post> ReadFeed(string url)
{
    var rssFeed = LoadRss(url);
    ...


Herilane

Спасибо! Это сработало. Самое печальное, что я не понимаю, почему это происходит. напр.. почему исходный код работал нормально в течение 3 недель - и почему этот код работал в урезанном тестовом модуле.