我正在尝试根据从API获得的网址使用python请求打开和下载pdf。这适用于许多文件,但是对于存储在一个特定站点上的文件,我会收到500 Internal Server错误响应。在响应中,有一个仅带有文本的简单html:未通过身份验证。
当我在Chrome中粘贴相同的网址时,我得到了pdf。但是,我在控制台中看到“ 503-无法加载资源”错误,因为它无法加载某些图标。这可以以某种方式相关吗?
当我在邮递员中完全没有标题的情况下运行该URL时,也可以使用。
我似乎遇到了与该问题相同的问题: python requests http response 500 (site can be reached in browser) 但是,将User-Agent添加到请求的标头的修复没有帮助。还能需要其他标头数据吗?有什么方法可以检查我的Chrome浏览器发送的请求吗?
更新:我记录了Chrome发送的请求,并将标头复制到了我的python请求中。还是一样的错误。我尝试过不带相同Cookie的产品。
这是我的代码:
import requests
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'nb,en-GB;q=0.9,en-US;q=0.8,en;q=0.7',
'Connection': 'keep-alive',
'Cookie': 'JSESSIONID=a95b392a6d468e2188e73d2c296b; NSC_FS-NL-CET-XFC-IUUQ-8081=ffffffff3d9c37c545525d5f4f58455e445a4a4229a1; JSESSIONID=7b1dd39854eee82b2db41225150e',
'Host': url.split('/')[2],
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
response = requests.get(url, headers=headers, verify=True)
我使用Python 3.6.3
答案 0 :(得分:0)
我发现只有在通过请求运行GET时才会出现错误。所以我改为使用:urllib.request.urlopen(url)
有关此方法的更多信息,请点击此处:Download file from web in Python 3