为什么请求库在此URL上失败?

时间:2013-07-02 00:28:01

标签: debugging browser python-requests

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

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.content。所以它在我的浏览器中工作,但在请求中失败。

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

  • 已停用Javascript
  • 已停用(及已删除)Cookie
  • 将每个
  • 中的User-Agent设置为相同

但由于禁用某些内容,我无法在请求中正常工作或在浏览器中失败。能够更好地了解浏览器魔法的人能帮助我诊断和解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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)