问题描述
使用 requests
下载网站上的图片时,发现所有 url 均报错 Error: HTTPSConnectionPool(host=xxxx, port=443): Read timed out.
尝试 ping
该网站,也可以 ping
通,但使用 wget
直接在命令行下载同样超时。
超时原因
一些网站对于请求头header
验证比较严格,不仅仅会验证 User-Agent
。因此尽可能使 requests
的headers
参数与浏览器访问的请求体一致。
问题解决
使用浏览器访问图片 url ,右键→检查元素→网络选项卡→图片的 Header 的请求体;
将请求体中的内容复制到 requests 的 headers 中(不一定每一项都会用到,可以测试找到被验证的那一项或几项)。
# 以下是我成功访问的 headers,仅供参考,不同网站可能不同
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2.1 Safari/605.1.15',
}