ASP.NET HttpWebRequest - 从今天开始,遭到亚马逊拒绝,503例外

时间:2011-06-29 03:24:12

标签: asp.net httpwebrequest amazon

我在亚马逊有一个联盟帐户,并且一直在从亚马逊网站收集信息,以便向他们发送买家。今天,我测试了我的网站,发现所有对亚马逊的请求都失败了。以下是证据:

  1. 我使用ASP.NET(VB)HttpWebRequest来收集数据。提供一个URL,然后使用HttpWebResponse / GetResponseStream来检索页面。
  2. 我从亚马逊API(AWSECommerceService)获得的大部分亚马逊数据 - 该服务仍然有效。 API无法提供某些数据,这就是我采用抓取的原因。
  3. 截至今天,亚马逊(甚至主页)上任何页面的任何HttpWebRequest都会返回503(服务器不可用)异常。这些页面在任何浏览器中都可见。
  4. 我访问的每个其他网站仍然可以使用(eBay,Barnes& Noble等),所以问题只出在亚马逊上。
  5.   

    假设:亚马逊已对其进行了编程   网站拒绝自动化   查询。
    有什么方法可以欺骗   该系统并说服亚马逊发送   页面?
    感谢和赞赏任何可以解决问题的人!

    注意:在研究问题时,我看到了一个向HttpWebRequest添加UserAgent参数的建议。我尝试使用IE8的UserAgent代码,但它没有任何区别。 (在http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.useragent.aspx找到UserAgent代码)

3 个答案:

答案 0 :(得分:3)

经过一些进一步的测试后发现,这种情况正在发生,因为亚马逊需要专门设置HttpWebRequest的Accept参数。 只需将其设置为:

request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

答案 1 :(得分:1)

在拨打电话之前,请尝试为HTTPWebRequest设置用户代理

答案 2 :(得分:0)

我在两天前开始遇到完全相同的问题。

我多年来一直在使用HttpWebRequest而没有任何问题,并且添加Useragent参数没有任何区别。

目前我能想出的唯一解决方案是使用带有嵌入式webbrowser的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