XmlReader Ошибка при чтении RSS-канала

Я пытаюсь прочитать RSS-канал с http://backend.deviantart.com/rss.xml?q=gallery%3aduster132/23316533&type=deviation со следующим кодом:

        //Different RSS Links
        string deviant_rsslink = @"http://backend.deviantart.com/rss.xml?q=gallery:duster132/23316533&type=deviation";
        string blogspot_rsslink = @"http://fightpunch.blogspot.com/feeds/posts/default";

        //Reading the links
        XmlReader reader = XmlReader.Create(deviant_rsslink); //LINE WHERE ERROR OCCURS
        SyndicationFeed feed = SyndicationFeed.Load(reader);
        reader.Close();
        foreach (SyndicationItem item in feed.Items)
        {
            String subject = item.Title.Text;
            Console.WriteLine("Subjext is: " + subject + "\n");
        }

... и я получаю сообщение об ошибке:

"The underlying connection was closed: The connection was closed unexpectedly."

Сначала я подумал, что Deviantart может блокировать мой IP-адрес, поэтому я попробовал это с разных компьютеров с разными IP-адресами, однако ошибка сохраняется, так что, похоже, проблема не в этом. Чтобы затруднить отслеживание, код работает без ошибок на http://fightpunch.blogspot.com/feeds/posts/default.

Что я должен попытаться исправить?


person Chris L    schedule 27.06.2014    source источник


Ответы (2)


Для вашего сайта требуется установить заголовок User-Agent

Ниже код должен работать..

string rss = null;
using (var wc = new Webclient())
{
    wc.Headers["User-Agent"] = "SO/1.0";
    rss = wc.DownloadString(deviant_rsslink);
}
XmlReader reader = XmlReader.Create(new StringReader(rss));
person L.B    schedule 27.06.2014
comment
Вау... работает!!! Можете ли вы объяснить, почему этот код работает? Я посмотрел пользовательский агент, но не уверен, что полностью это понимаю. Я был озадачен этим в течение нескольких недель ... большое вам спасибо !!! - person Chris L; 28.06.2014
comment
@ChrisL Я не знаю, как я могу это объяснить (с моим ограниченным английским языком). Просто удалите строку wc.Headers и попробуйте. это не сработает... Как я это нашел? может опыт. - person L.B; 28.06.2014
comment
Как бы это изменилось, если бы я попытался загрузить RSS xml следующим образом: XDocument rsslink = XDocument.Load(weblink); - person Chris L; 28.06.2014
comment
@ChrisL Скорее всего, XDocument.Load не публикует заголовок User-Agent. Это не обязательно, но на некоторых сайтах может потребоваться. (w3.org/Protocols/HTTP/HTRQ_Headers.html#user-agent ) - person L.B; 28.06.2014

В моем случае SSL был отключен, а разрешен только TLS. Вместо этого я перешел на использование HTTPWebRequest. Обратите внимание, что я использую .NET 4.0 и не использую TLS1.2 в качестве опции, поэтому я жестко запрограммировал для этого значение (3072):

Dim doc As New XmlDocument()
Dim req As HttpWebRequest = DirectCast(WebRequest.Create(FeedAddress), HttpWebRequest)
ServicePointManager.SecurityProtocol = DirectCast(3072, SecurityProtocolType)
req.Method = "GET"
Dim myHttpWebResponse As HttpWebResponse = DirectCast(req.GetResponse(), HttpWebResponse)

Dim response As WebResponse = req.GetResponse
Dim streamResponse As Stream = response.GetResponseStream
doc.Load(streamResponse)
person serializer    schedule 02.08.2016