繁体   English   中英

python requests.get(url) 超时但在浏览器(chrome)中有效; 如何为某个主机定制请求标头?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM