comparison env/lib/python3.7/site-packages/requests_toolbelt/adapters/ssl.py @ 2:6af9afd405e9 draft

"planemo upload commit 0a63dd5f4d38a1f6944587f52a8cd79874177fc1"
author shellac
date Thu, 14 May 2020 14:56:58 -0400
parents 26e78fe6e8c4
children
comparison
equal deleted inserted replaced
1:75ca89e9b81c 2:6af9afd405e9
1 # -*- coding: utf-8 -*-
2 """
3
4 requests_toolbelt.ssl_adapter
5 =============================
6
7 This file contains an implementation of the SSLAdapter originally demonstrated
8 in this blog post:
9 https://lukasa.co.uk/2013/01/Choosing_SSL_Version_In_Requests/
10
11 """
12 import requests
13
14 from requests.adapters import HTTPAdapter
15
16 from .._compat import poolmanager
17
18
19 class SSLAdapter(HTTPAdapter):
20 """
21 A HTTPS Adapter for Python Requests that allows the choice of the SSL/TLS
22 version negotiated by Requests. This can be used either to enforce the
23 choice of high-security TLS versions (where supported), or to work around
24 misbehaving servers that fail to correctly negotiate the default TLS
25 version being offered.
26
27 Example usage:
28
29 >>> import requests
30 >>> import ssl
31 >>> from requests_toolbelt import SSLAdapter
32 >>> s = requests.Session()
33 >>> s.mount('https://', SSLAdapter(ssl.PROTOCOL_TLSv1))
34
35 You can replace the chosen protocol with any that are available in the
36 default Python SSL module. All subsequent requests that match the adapter
37 prefix will use the chosen SSL version instead of the default.
38
39 This adapter will also attempt to change the SSL/TLS version negotiated by
40 Requests when using a proxy. However, this may not always be possible:
41 prior to Requests v2.4.0 the adapter did not have access to the proxy setup
42 code. In earlier versions of Requests, this adapter will not function
43 properly when used with proxies.
44 """
45
46 __attrs__ = HTTPAdapter.__attrs__ + ['ssl_version']
47
48 def __init__(self, ssl_version=None, **kwargs):
49 self.ssl_version = ssl_version
50
51 super(SSLAdapter, self).__init__(**kwargs)
52
53 def init_poolmanager(self, connections, maxsize, block=False):
54 self.poolmanager = poolmanager.PoolManager(
55 num_pools=connections,
56 maxsize=maxsize,
57 block=block,
58 ssl_version=self.ssl_version)
59
60 if requests.__build__ >= 0x020400:
61 # Earlier versions of requests either don't have this method or, worse,
62 # don't allow passing arbitrary keyword arguments. As a result, only
63 # conditionally define this method.
64 def proxy_manager_for(self, *args, **kwargs):
65 kwargs['ssl_version'] = self.ssl_version
66 return super(SSLAdapter, self).proxy_manager_for(*args, **kwargs)