Skip to content

Commit cdf50bd

Browse files
authored
Merge pull request #217 from klattimer/master
exclude certain headers when requested
2 parents b69394a + ca3c890 commit cdf50bd

File tree

4 files changed

+15
-10
lines changed

4 files changed

+15
-10
lines changed

ws4py/client/__init__.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
class WebSocketBaseClient(WebSocket):
1616
def __init__(self, url, protocols=None, extensions=None,
17-
heartbeat_freq=None, ssl_options=None, headers=None):
17+
heartbeat_freq=None, ssl_options=None, headers=None, exclude_headers=None):
1818
"""
1919
A websocket client that implements :rfc:`6455` and provides a simple
2020
interface to communicate with a websocket server.
@@ -78,6 +78,8 @@ def __init__(self, url, protocols=None, extensions=None,
7878
self.resource = None
7979
self.ssl_options = ssl_options or {}
8080
self.extra_headers = headers or []
81+
self.exclude_headers = exclude_headers or []
82+
self.exclude_headers = [x.lower() for x in self.exclude_headers]
8183

8284
if self.scheme == "wss":
8385
# Prevent check_hostname requires server_hostname (ref #187)
@@ -211,7 +213,7 @@ def connect(self):
211213
# default port is now 443; upgrade self.sender to send ssl
212214
self.sock = ssl.wrap_socket(self.sock, **self.ssl_options)
213215
self._is_secure = True
214-
216+
215217
self.sock.connect(self.bind_addr)
216218

217219
self._write(self.handshake_request)
@@ -257,14 +259,15 @@ def handshake_headers(self):
257259
('Sec-WebSocket-Key', self.key.decode('utf-8')),
258260
('Sec-WebSocket-Version', str(max(WS_VERSION)))
259261
]
260-
262+
261263
if self.protocols:
262264
headers.append(('Sec-WebSocket-Protocol', ','.join(self.protocols)))
263265

264266
if self.extra_headers:
265267
headers.extend(self.extra_headers)
266268

267-
if not any(x for x in headers if x[0].lower() == 'origin'):
269+
if not any(x for x in headers if x[0].lower() == 'origin') and \
270+
'origin' not in self.exclude_headers:
268271

269272
scheme, url = self.url.split(":", 1)
270273
parsed = urlsplit(url, scheme="http")
@@ -277,6 +280,8 @@ def handshake_headers(self):
277280
origin = origin + ':' + str(parsed.port)
278281
headers.append(('Origin', origin))
279282

283+
headers = [x for x in headers if x[0].lower() not in self.exclude_headers]
284+
280285
return headers
281286

282287
@property

ws4py/client/geventclient.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
__all__ = ['WebSocketClient']
1111

1212
class WebSocketClient(WebSocketBaseClient):
13-
def __init__(self, url, protocols=None, extensions=None, heartbeat_freq=None, ssl_options=None, headers=None):
13+
def __init__(self, url, protocols=None, extensions=None, heartbeat_freq=None, ssl_options=None, headers=None, exclude_headers=None):
1414
"""
1515
WebSocket client that executes the
1616
:meth:`run() <ws4py.websocket.WebSocket.run>` into a gevent greenlet.
@@ -41,7 +41,7 @@ def outgoing():
4141
gevent.joinall(greenlets)
4242
"""
4343
WebSocketBaseClient.__init__(self, url, protocols, extensions, heartbeat_freq,
44-
ssl_options=ssl_options, headers=headers)
44+
ssl_options=ssl_options, headers=headers, exclude_headers=exclude_headers)
4545
self._th = Greenlet(self.run)
4646

4747
self.messages = Queue()

ws4py/client/threadedclient.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
class WebSocketClient(WebSocketBaseClient):
99
def __init__(self, url, protocols=None, extensions=None, heartbeat_freq=None,
10-
ssl_options=None, headers=None):
10+
ssl_options=None, headers=None, exclude_headers=None):
1111
"""
1212
.. code-block:: python
1313
@@ -32,7 +32,7 @@ def received_message(self, m):
3232
3333
"""
3434
WebSocketBaseClient.__init__(self, url, protocols, extensions, heartbeat_freq,
35-
ssl_options, headers=headers)
35+
ssl_options, headers=headers, exclude_headers=exclude_headers)
3636
self._th = threading.Thread(target=self.run, name='WebSocketClient')
3737
self._th.daemon = True
3838

ws4py/client/tornadoclient.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
class TornadoWebSocketClient(WebSocketBaseClient):
1111
def __init__(self, url, protocols=None, extensions=None,
12-
io_loop=None, ssl_options=None, headers=None):
12+
io_loop=None, ssl_options=None, headers=None, exclude_headers=None):
1313
"""
1414
.. code-block:: python
1515
@@ -32,7 +32,7 @@ def closed(self, code, reason=None):
3232
ioloop.IOLoop.instance().start()
3333
"""
3434
WebSocketBaseClient.__init__(self, url, protocols, extensions,
35-
ssl_options=ssl_options, headers=headers)
35+
ssl_options=ssl_options, headers=headers, exclude_headers=exclude_headers)
3636
if self.scheme == "wss":
3737
self.sock = ssl.wrap_socket(self.sock, do_handshake_on_connect=False, **self.ssl_options)
3838
self._is_secure = True

0 commit comments

Comments
 (0)