4
4
import ssl
5
5
6
6
from six .moves import http_client
7
- from six .moves .urllib .parse import urlparse
7
+ from six .moves .urllib .parse import urlparse , unquote
8
+
9
+ from plotly .api import utils
8
10
9
11
10
12
class Stream :
@@ -86,6 +88,9 @@ def _get_proxy_config(self):
86
88
87
89
proxy_server = None
88
90
proxy_port = None
91
+ proxy_username = None
92
+ proxy_password = None
93
+ proxy_auth = None
89
94
ssl_enabled = self ._ssl_enabled
90
95
91
96
if ssl_enabled :
@@ -99,8 +104,15 @@ def _get_proxy_config(self):
99
104
p = urlparse (proxy )
100
105
proxy_server = p .hostname
101
106
proxy_port = p .port
107
+ proxy_username = p .username
108
+ proxy_password = p .password
109
+
110
+ if proxy_username and proxy_password :
111
+ username = unquote (proxy_username )
112
+ password = unquote (proxy_password )
113
+ proxy_auth = utils .basic_auth (username , password )
102
114
103
- return proxy_server , proxy_port
115
+ return proxy_server , proxy_port , proxy_auth
104
116
105
117
def _get_ssl_context (self ):
106
118
"""
@@ -123,7 +135,7 @@ def _connect(self):
123
135
port = self ._port
124
136
headers = self ._headers
125
137
ssl_enabled = self ._ssl_enabled
126
- proxy_server , proxy_port = self ._get_proxy_config ()
138
+ proxy_server , proxy_port , proxy_auth = self ._get_proxy_config ()
127
139
128
140
if (proxy_server and proxy_port ):
129
141
if ssl_enabled :
@@ -135,7 +147,12 @@ def _connect(self):
135
147
self ._conn = http_client .HTTPConnection (
136
148
proxy_server , proxy_port
137
149
)
138
- self ._conn .set_tunnel (server , port )
150
+
151
+ tunnel_headers = None
152
+ if proxy_auth :
153
+ tunnel_headers = {'Proxy-Authorization' : proxy_auth }
154
+
155
+ self ._conn .set_tunnel (server , port , headers = tunnel_headers )
139
156
else :
140
157
if ssl_enabled :
141
158
context = self ._get_ssl_context ()
0 commit comments