-2

在 Python 中,如何使用 CONNECT http 动词并进行 http 标头操作以及 TLS/SSL?

不幸requests/urllib的是不支持这个

试图避免使用openssl + sockets.

4

1 回答 1

1

您正在阅读 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')

当然,如果您以适当的方式为您的平台配置了默认代理设置,您甚至不需要做这么多;两者都requestsurllib使用它们。

于 2018-05-17T03:49:18.777 回答