![](/img/trans.png)
[英]requests.get times out for url that returns instantly in the browser
[英]python requests.get(url) times out but works in browser (chrome); how can I tailor the request headers for a certain host?
我正在尝试使用 python 请求模块下载文件,我的代码适用于某些 url/主机,但我遇到了一个不起作用的文件。
基于其他类似的问题,它可能与用户代理请求 header 有关,我试图通过添加 chrome 用户代理进行补救,但对于这个特定的 url,连接仍然超时(它确实适用于其他人)。
我已经测试在 chrome 浏览器中打开 url (一切正常)并检查请求标头,但我仍然无法弄清楚我的代码失败的原因:
import requests
url = 'http://publicdata.landregistry.gov.uk/market-trend-data/house-price-index-data/Indices-2020-03.csv'
headers = {'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
session = requests.Session()
session.headers.update(headers)
response = session.get(url, stream=True)
# !!! code fails here for this particular url !!!
with open('test.csv', "wb") as fh:
for x in response.iter_content(chunk_size=1024):
if x: fh.write(x)
2020-08-14 更新我已经弄清楚出了什么问题; 在代码运行的情况下,url 使用的是 https 协议。 这个 url 是 http 协议,我的代理设置没有为 http 仅配置 Z5E056C000A1C48BADE57D。 在为请求提供 http 代理后,我的代码确实按所写的那样工作。
您可以通过传递timeout=None
来禁用请求的超时。 这是官方文档: https://requests.readthedocs.io/en/master/user/advanced/#timeouts
您发布的代码对我有用,它保存了文件(129007 行)。 可能是主机限制了你,稍后再试看看是否有效。
# count lines
$ wc -l test.csv
129007 test.csv
# inspect headers
$ head -n 4 test.csv
Date,Region_Name,Area_Code,Index
1968-04-01,Wales,W92000004,2.11932727
1968-04-01,Scotland,S92000003,2.108087275
1968-04-01,Northern Ireland,N92000001,3.300419757
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.