我在亚马逊有一个附属账户,一直在从亚马逊网站收集信息,目的是向他们发送买家。今天,我测试了我的网站,发现所有向亚马逊的请求都失败了。证据如下:
- 我正在使用ASP.NET(VB)HttpWebRequest来收集数据。为其提供一个URL,然后使用HttpWebResponse/GetResponseStream检索页面
- 我从亚马逊API(AWSECommerceService)获得的大部分亚马逊数据——该服务仍然有效。有些数据无法从API获得,这就是为什么我求助于抓取
- 截至今天,对亚马逊上任何页面(甚至主页)的任何HttpWebRequest都会返回503(服务器不可用)异常。这些页面在任何浏览器中都可见
- 我访问的其他网站(eBay、Barnes&Noble等)仍然有效,所以问题只出在亚马逊
Postulate:亚马逊已经将其网站自动拒绝询问
有什么方法可以欺骗吗并说服亚马逊发送页面
感谢并赞扬任何能带来光明的人!
注意:在研究这个问题时,我看到了一个向HttpWebRequest添加UserAgent参数的建议。我尝试在IE8中使用UserAgent代码,但没有任何区别。(UserAgent代码位于http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.useragent.aspx)
经过进一步的测试,发现发生这种情况是因为Amazon需要专门设置HttpWebRequest
的Accept参数。只需将其设置为:
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
在调用
从两天前开始,我遇到了完全相同的问题。
我多年来一直在使用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