0

我有一个网址。当我尝试以编程方式访问它时,后端服务器失败(我不运行服务器):

import requests
r = requests.get('http://www.courts.wa.gov/index.cfm?fa=controller.managefiles&filePath=Opinions&fileName=875146.pdf')
r.status_code  # 200
print r.content

当我查看内容时,它是一个错误页面,尽管状态码是 200。如果您单击该链接,它将在您的浏览器中工作——您将获得一个 PDF——这正是我在 r 中所期望的。内容。所以它在我的浏览器中工作,但在请求中失败。

为了诊断,我试图消除我的浏览器和请求库之间的差异。到目前为止,我已经:

  • 禁用 Javascript
  • 禁用(和删除)cookies
  • 将 User-Agent 设置为每个中的相同

但是由于禁用了某些东西,我无法在请求中正常工作或在浏览器中失败。对浏览器魔术有更好了解的人可以帮助我诊断和解决这个问题吗?

4

2 回答 2

1

该请求在 Chrome 中有效吗?如果是这样,您可以打开 Web 检查器并右键单击请求以将其复制为 curl 命令。然后,您将可以访问所有标头、参数和请求正文,您可以使用它们来查看哪些触发了您在请求库中看到的失败。

于 2013-07-02T00:50:17.263 回答
0

您可能遇到了基于 User-Agent 进行区分的服务器。这有效:

import requests
S = requests.Session()
S.headers.update({'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'})
r = S.get('http://www.courts.wa.gov/index.cfm?fa=controller.managefiles&filePath=Opinions&fileName=875146.pdf')

with open('dl.pdf', 'wb') as f:
    f.write(r.content)
于 2013-07-18T16:13:52.213 回答