在 python 中使用带 TLS 的代理

Using proxies with TLS in python

我目前正在尝试将 TLS 1.1 用于 python 请求。到目前为止,我一直在使用这个片段:

CIPHERS = (
            'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:AES256-SHA'
        )


    class TlsAdapter(HTTPAdapter):

        def __init__(self, ssl_options=0, **kwargs):
            self.ssl_options = ssl_options
            super(TlsAdapter, self).__init__(**kwargs)

        def init_poolmanager(self, *pool_args, **pool_kwargs):
            ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)
            self.poolmanager = PoolManager(*pool_args,
                                        ssl_context=ctx,
                                        **pool_kwargs)

                                        


    self.session = requests.session()
    adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
    self.session.mount("https://", adapter)

如果我 运行 它没有 HTTP 代理,它工作正常,但是当我在我的会话中设置 HTTP 代理时,似乎 work/create 没有 TLS 连接,就像这样:

proxies = {
                'http': 'http://{}:{}@{}:{}'.format(user, password, ip, port),
                'https': 'http://{}:{}@{}:{}'.format(user, password, ip, port)
            }
self.session.proxies.update(proxies = proxies)

关于如何让它仍然与代理一起工作有什么想法吗?我不太确定我在做什么 wrong/need 来改变。谢谢!

这是设置或更新代理的方式。目前的方式根本没有设置代理。

而不是使用这个:

self.session.proxies.update(proxies = proxies)

应该是:

self.session.proxies.update(proxies)

https://2.python-requests.org/en/master/user/advanced/#proxies