在 Python 中,如何使用 CONNECT http 动词并进行 http 标头操作以及 TLS/SSL?
不幸requests/urllib
的是不支持这个。
试图避免使用openssl + sockets
.
您正在阅读 2013 年的博客文章,其中包含指向urllib3
Github 问题的链接,该问题在大约一个月后得到修复,requests
不久之后添加了支持,并且在所有 2.x 版本中都有。
因此,您正在寻找解决近 5 年前问题的解决方法。
要使用 HTTPS 代理,您只需将其配置为与 HTTP 代理相同的方式:
proxies = {
'https': 'http://10.10.1.10:12345',
}
page = requests.get('https://example.org', proxies=proxies)
例如,如果您nc -kl 1080
在 10.10.1.10 上运行,您将看到:
CONNECT example.org:443 HTTP/1.0
如果你在那里运行一个实际的 HTTPS 代理,它就可以工作。
您还声称它urllib
不处理 HTTPS 代理,但它总是有。设置起来稍微痛苦一些,但仍然没有那么难:
ph = urllib.request.ProxyHandler({'https': '192.168.42.100:1080'})
op = urllib.request.build_opener(p)
page = op.open('https://example.com')
…或者,如果您想将它用于所有事情而不是单个请求:
ph = urllib.request.ProxyHandler({'https': '192.168.42.100:1080'})
urllib.request.install_opener(urllib.request.build_opener(p))
page = urllib.request.open('https://example.com')
当然,如果您以适当的方式为您的平台配置了默认代理设置,您甚至不需要做这么多;两者都requests
将urllib
使用它们。