Ошибка 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.
Что я должен попытаться исправить это?
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));
В моем случае 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)