WebClient забранява отварянето на страница в wikipedia?

Ето кода, който се опитвам да изпълня:

var wc = new WebClient();
var stream = wc.OpenRead(
             "http://en.wikipedia.org/wiki/List_of_communities_in_New_Brunswick");

Но продължавам да получавам забранена грешка 403. Не разбирам защо. Работи добре за други страници. Мога да отворя страницата добре в браузъра си. Как мога да поправя това?


person mpen    schedule 27.01.2011    source източник


Отговори (1)


Обикновено не бих използвал OpenRead(), вместо това опитайте DownloadData() или DownloadString().

Също така може да се окаже, че wikipedia умишлено блокира вашата заявка, защото не сте предоставили низ на потребителски агент:

WebClient client = new WebClient();
client.Headers.Add("user-agent", 
    "Mozilla/5.0 (Windows; Windows NT 5.1; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4");

Използвам WebClient доста често и доста бързо научих, че уебсайтовете могат и ще блокират вашата заявка, ако не предоставите низ на потребителски агент, който съответства на известен уеб браузър. Освен това, ако създадете свой собствен низ от потребителски агент (напр. „моят супер готин уеб скрепер“), вие също ще бъдете блокирани.

[Редактиране]

Промених моя примерен низ на потребителски агент с този на модерна версия на Firefox. Оригиналният пример, който дадох, беше низът на потребителския агент за IE6, което не е добра идея. Защо? Някои уебсайтове може да извършат филтриране въз основа на IE6 и да изпратят на всеки с този браузър съобщение или до друга страница, която казва „Моля, актуализирайте браузъра си“ – това означава, че няма да получите съдържанието, което сте искали.

person JK.    schedule 27.01.2011
comment
Използването на DownloadString() вместо OpenRead() ще работи със или без посочване на потребителския агент. Ако предпочитате да използвате OpenRead() по някаква причина, добавянето на низа на потребителския агент към заглавките върши работа. - person Nathan Taylor; 27.01.2011
comment
Просто странно, защото работеше добре за някои от другите провинции... добавянето на низа на потребителския агент обаче го поправи за NB. Благодаря! Защо обаче DownloadString трябва да има някаква разлика? Свързва се по същия начин, нали? - person mpen; 27.01.2011
comment
@Nathan, така или иначе бих използвал добре познат потребителски агент. Какво ще стане, ако няколко месеца по-късно уебсайтът се промени и сега отхвърли празния потребителски агент? Вашият код се счупва без предупреждение и ще бъде много трудно да откриете проблема. Но можете да бъдете доста сигурни, че те няма изведнъж да започнат да отхвърлят известен потребителски агент. - person JK.; 27.01.2011
comment
Няма да споря с това. - person Nathan Taylor; 27.01.2011