ASP.NET HttpWebRequest - начиная с сегодняшнего дня, отклонен Amazon за исключением 503 - PullRequest
2 голосов
/ 29 июня 2011

У меня есть партнерский аккаунт в Amazon, и я собираю информацию с сайта Amazon с целью отправки им покупателей. Сегодня я проверил свой сайт и обнаружил, что все запросы к Amazon не выполнены. Вот доказательства:

  1. Я использую ASP.NET (VB) HttpWebRequest для сбора данных. Укажите URL-адрес, затем используйте HttpWebResponse / GetResponseStream для извлечения страницы.
  2. Большинство моих данных Amazon я получаю из Amazon API (AWSECommerceService) - эта служба все еще работает. Некоторые данные недоступны из API, поэтому я прибегаю к соскобам.
  3. На сегодняшний день любой запрос HttpWebRequest на любую страницу на Amazon (даже на домашнюю страницу) возвращает исключение 503 (сервер недоступен). Все эти страницы видны в любом браузере.
  4. Все остальные веб-сайты, к которым у меня есть доступ, по-прежнему работают (eBay, Barnes & Noble и т. Д.), Поэтому проблема только в Amazon.

Постулат: Amazon запрограммировал Веб-сайт, чтобы отклонить автоматизированный запросы.
Есть ли способ подделать система и убедить Amazon отправить страницу?
Спасибо и спасибо всем, кто может пролить свет!

ПРИМЕЧАНИЕ: при исследовании проблемы я увидел предложение добавить параметр UserAgent в HttpWebRequest. Я пытался использовать код UserAgent для IE8, но это не имело никакого значения. (Код UserAgent найден на http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.useragent.aspx)

Ответы [ 3 ]

3 голосов
/ 19 ноября 2014

После некоторого дальнейшего тестирования выясняется, что это произошло, потому что Amazon нужно, чтобы параметр Accept параметра HttpWebRequest был специально установлен. Просто установите его на:

request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
1 голос
/ 30 марта 2012

Попробуйте установить UserAgent для HTTPWebRequet перед выполнением вызова

0 голосов
/ 30 июня 2011

Я столкнулся с точно такой же проблемой, начиная с двух дней назад.

Я годами без проблем пользуюсь HttpWebRequest, и добавление параметра Useragent не имеет значения.

Единственное решение, которое я могу предложить в настоящее время, это использовать форму Windows со встроенным веб-браузером с некоторым кодом, подобным следующему:

Sub GetHTML

 WebBrowser1.Navigate("http://www.amazon.co.uk")

Application.DoEvents()

End Sub

Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

    Dim oDoc1
    Dim StrHTML As String

    oDoc1 = WebBrowser1.Document
    StrHTML = oDoc1.body.outerhtml
End Sub
...