python - 使用 Python 请求下载 PDF 时访问被拒绝

标签 python http python-requests

我正在寻找使用 python 下载 PDF 并为此使用 requests 库。以下代码适用于某些 PDF 文档,但它会为少数文档引发错误。

from pathlib import Path
import requests

filename = Path('c:/temp.pdf')
url = 'https://www.rolls-royce.com/~/media/Files/R/Rolls-Royce/documents/investors/annual-reports/rr-full%20annual%20report--tcm92-55530.pdf'
response = requests.get(url,verify=False)
filename.write_bytes(response.content)

以下是准确的响应(response.content),但是,我可以使用 chrome 浏览器下载相同的文档而不会出现任何错误

b'<HTML><HEAD>\n<TITLE>Access Denied</TITLE>\n</HEAD><BODY>\n<H1>Access Denied</H1>\n \nYou don\'t have permission to access "http&#58;&#47;&#47;www&#46;rolls&#45;royce&#46;com&#47;&#37;7e&#47;media&#47;Files&#47;R&#47;Rolls&#45;Royce&#47;documents&#47;investors&#47;annual&#45;reports&#47;rr&#45;full&#37;20annual&#37;20report&#45;&#45;tcm92&#45;55530&#46;pdf" on this server.<P>\nReference&#32;&#35;18&#46;36ad4d68&#46;1562842755&#46;6294c42\n</BODY>\n</HTML>\n'

有什么办法可以摆脱这种情况吗?

最佳答案

你得到 403 Forbidden 因为 requests 默认发送 User-Agent: python-requests/2.19.1 header 并且服务器拒绝你的请求.

您可以从浏览器中获取此 header 的正确值,一切都会好起来的。

例如:

import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 YaBrowser/19.6.1.153 Yowser/2.5 Safari/537.36'}
url = 'https://www.rolls-royce.com/~/media/Files/R/Rolls-Royce/documents/investors/annual-reports/rr-full%20annual%20report--tcm92-55530.pdf'

r = requests.get(url, headers=headers)
print(r.status_code)  # 200

关于python - 使用 Python 请求下载 PDF 时访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56987761/

相关文章:

http - DNS发生在协议(protocol)栈的哪一层?

http - Crm Web Api 展开实体的 304 响应无效

python - 通过请求模块调用 View 不会创建正确的 session 数据

python - 嵌入 python

Python:如何从列表中删除空列表?

python - 使用ast.literal_eval()清理数据时出现语法错误

Python 请求有时会卡住

python - 如何显示日期选择器小部件?

Python:需要附加额外的 header ,在 urllib2 添加隐藏默认值之后,在发送请求之前

Python 请求带有 Unicode 参数的 URL