我有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库之间的差异。到目前为止,我已经:
但由于禁用某些内容,我无法在请求中正常工作或在浏览器中失败。能够更好地了解浏览器魔法的人能帮助我诊断和解决这个问题吗?
答案 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)