首页 > 编程语言 >【Python】爬虫笔记-requests.exceptions.ProxyError

【Python】爬虫笔记-requests.exceptions.ProxyError

时间:2022-12-29 23:00:16浏览次数:72  
标签:HTTP Python 代理 代理服务器 ProxyError proxy HTTPS exceptions http

0x01

爬虫使用HTTP/HTTPS代理时报故:

proxy = '127.0.0.1:9743'
proxies = {
    'http': 'http://' + proxy,
    'https': 'https://' + proxy,
}
response = requests.get(url, proxies=proxies)

Ⅰ 完整信息

requests.exceptions.ProxyError: HTTPSConnectionPool(host='www.xxx.com', port=443): Max retries exceeded with url: / (Caused by
ProxyError('Cannot connect to proxy.', OSError(0, 'Error')))

Ⅱ 错误原因

urllilb3 在1.26.0版本后增加了对HTTPS代理的支持,此前 urllib3 不支持HTTPS代理(所以以前设置了HTTPS代理时依然是默默使用 HTTP 连接到代理服务器)。

更新后 urllib3 启用HTTPS代理,但代理服务器不支持HTTPS代理导致错误。

Ⅲ 解决方案

① 配置 HTTP 代理:

proxies = {
    'http': 'http://' + proxy,
    'https': 'http://' + proxy,
}

当然,也可以直接将传入的url的协议改为http。

② 降低 urllib3 版本:

pip install urllib3==1.25.11

如果此时挂着全局代理,可能会更新失败,因为 pip 在20.3版本后内置了 urllib3 包。

0x02

实际上这个问题与代理服务器有关,许多代理服务器都支持的是HTTP代理,而非HTTPS代理。

HTTP代理与HTTPS代理的区别主要在于浏览器到代理服务器之间的通信(inbound),前者是明文而后者是经过tls加密的。HTTP代理同样可以访问HTTPS网站(基于HTTP  Tunnel)。

回到开头,原本的写法本身更像是一个逻辑错误,一般在固定了ip和port的情况下,应该明确使用的是HTTP还是HTTPS代理,除非使用的是不同的端口号同时提供两种代理模式。

参考

标签:HTTP,Python,代理,代理服务器,ProxyError,proxy,HTTPS,exceptions,http
From: https://www.cnblogs.com/victorique-de-blois/p/17013753.html

相关文章