ChangeLog ============ - 1.8.0 - Added `on_reconnect` parameter to WebSocketApp to handle callback ambiguity (#972) - Improve handling of SSLEOFError and use reconnect bool (#961) - Minor linting and docs CI build upgrades (981c00e, 75ba91a, bec2608) - 1.7.0 - Renamed `mask` variable in ABNF to prevent name collision with `mask()` function (9b51f73) - Fixed old http import of HTTPStatus in _handshake.py (9b51f73) - Add `send_text()` and `send_bytes()` to _app.py (#953) - Improved typehint support (#953, 9b51f73, 8b73d00) - General readability improvements, made all string concatenations use f-strings (#909, 780584f, 3eabc6e) - Applied black formatting style to code (da7f286) - 1.6.4 - Fix #952, add support for HTTP 307 and 308 redirect codes (69468ad) - 1.6.3 - Fix type hints issues (#949) - Add support for Python beta release 3.12 in CI (#946) - Add maintainer email in setup.py (3d464fc) - 1.6.2 - Add support for SSLKEYLOGFILE environment variable (#943) - Add support for callable header arguments (#932) - Change handling of proxy environment variables, is_secure set to true now prevents http_proxy from getting used (#929) - 1.6.1 - Fix Dispatcher keyboard interrupt. Should solve reconnect loop with rel (#924) - 1.6.0 - Fix teardown issue when ping thread is not properly ended (#918) - Fix double ping wait time on first ping (#912) - Minor type hints improvements (eda6724, 54b3013) - 1.5.3 - Add logic to avoid error in the case where content-length header does not exist, bug introduced in 1.5.2 (#911) - Fix wsdump.py script typing, bug introduced in 1.5.2 (#914) - 1.5.2 - Add type hints (#908) - Fix pytype errors (#906) - Fix args passed to logging function (#898) - Standardize PEP 3101 formatting (c6a445f) - Add more verbose exception for unsuccessful handshake for #900 (f85ae1f) - 1.5.1 - Fix logic bug that can cause disconnects (#893) - 1.5.0 - Refactor and improve ping/pong logic to resolve several issues, including an infinite loop issue during reconnect (#862) - Fix issue where `skip_utf8_validation = True` is ignored (#886) - Fix issue where sslopt `is_ssl` is ignored (#875) - Downgrade "websocket connected" message from logging.warning to logging.info (#888) - Update github actions to newer versions (669fe1b) - 1.4.2 - create_dispatcher is determined by URL ws/wss, NOT by presence of sslopt args, to maintain consistency (#875) - Remove redundant key generation line (#864) - Updated docs to fix old links and updated CI to include Python 3.11 - 1.4.1 - Fix stack growth bug when `run_forever` reconnects (#854) - Add doctest CI for sphinx docs code examples (d150099) - General docs improvements - 1.4.0 - Fix automatic reconnect with `run_forever` (#838) - Allow a timeout to be set when using a proxy (#842) - 1.3.3 - Fix unclosed socket error (#826) - Update header dict access (#818) - Add utf8 workaround to docs (fc9ee9f) - 1.3.2 - Add support for pre-initialized stream socket in new WebSocketApp (#804) - Remove rel.saferead() in examples (f0bf03d) - Increase scope of linting checks (dca4022) - Start adding type hints (a8a4099) - 1.3.1 - Fix 10 year old bug and improve dispatcher handling for run_forever (#795) - Fix run_forever to never return None, only return True or False, and add two tests (#788) - Remove Python 3.6 support, EOL in Dec 2021 - 1.3.0 - BREAKING: Set Origin header to use https:// scheme when wss:// WebSocket URL is passed (#787) - Replace deprecated/broken WebSocket URLs with working ones (6ad5197) - Add documentation referencing rel for automatic reconnection with run_forever() - Add missing opcodes 1012, 1013 (#771) - Add errno.ENETUNREACH to improve error handling (da1b050) - Minor documentation improvements and typo fixes - 1.2.3 - Fix broken run_forever() functionality (#769) - 1.2.2 - Migrate wsdump script in setup.py from scripts to newer entry_points (#763) - Add support for ssl.SSLContext for arbitrary SSL parameters (#762) - Remove keep_running variable (#752) - Remove HAVE_CONTEXT_CHECK_HOSTNAME variable (dac1692) - Replace deprecated ssl.PROTOCOL_TLS with ssl.PROTOCOL_TLS_CLIENT (#760) - Simplify code and improve Python 3 support (#751, #750, #746) - Fill default license template fields (#748) - Update CI tests - Improve documentation (#732, #733, #734, #737, #766, #768) - 1.2.1 - Fix python-socks dependency issue mentioned in #728 - Replace echo.websocket.org with a local websockets echo server for unit tests (4951de2) - 1.2.0 - Fix #697, #665: Transition from LGPL 2.1 license to Apache 2.0 license - Revert #417 and reimplement SOCKS proxy support with python-socks instead of PySocks (fbcbd43) - 1.1.1 - Fix #377: increase exception verbosity in _app.py callback exception - Fix #717: race condition during connection close - Fix #722: improve handling where credentials include symbols like @ - Fix #711: improve handling if ssl is None - 1.1.0 - Set enable_multithread to True by default (beb135a) - Performance improvement in _mask() function (287970e, #433) - Performance improvement in recv_strict() function (60e4711, #255) - Performance improvement by removing numpy-related code (a462d45) - Support uppercase no_proxy, http_proxy, https_proxy env vars (150df4f, #700) - Add sslopt 'server_hostname' support (#698) - Replace deprecated ssl.PROTOCOL_SSLv23 with ssl.PROTOCOL_TLS (494564f) - Update documentation, README (7c9d604, #704) - 1.0.1 - Fix exception handling bug #694 - 1.0.0 - Removed Python 2 code, now only Python 3 compatible (d45343b, b7c5733, ff67af8) - Use semver for release versions, unlike breaking release 0.58.0 (#669) - Enhance enableTrace output (13e83b4) - Improve unit tests to over 80% code coverage (1679ab0, a00dd2d, etc.) - Fix old _app.py close status code bug (resulted in on_close() requiring 3 args) (#686) - Replace select import with selectors (#568) - 0.59.0 - Last main release to support Python 2 - Fix Python 2 urlparse scheme (#332) - Add support for headers with multiple values (#627) - Add debug support for reserved custom status codes (#639) - Allow multiple Set-Cookie: headers (#649) - Simplified cookie sorting (#662) - Add no_proxy support (#671) - Add Host header to HTTP proxy request (#677) - Improve PEP8 style compliance (dc3f5c4) - 0.58.0 - Fix README typos (#659) - Create README.md from README.rst (#655) - Capitalize 'Upgrade' in 'Connection: Upgrade' (#605) - Add Python 3.8 and 3.9 CI support (#596) - Replace deprecated `thread.isAlive` with `thread.is_alive` (#594) - Revert to LGPL v2.1 license (#526) - Add code coverage CI testing (#663) - Properly revert callback (#442) - Replace TravisCI with GitHub Actions (36e32c7) - Create Sphinx readthedocs.io documentation (aace06b) - 0.57.0 - wsdump: Fix --headers option (#589) - Fix getting 400 bad request with long proxy authorization string (#587) - Fix for errors that occur when closing websocket from another thread (#586) - avoid calling repr(data) if tracing is not enabled (#584) - Fixed typo (#579) - Create dummy `ssl` object (#577) - Show compressed text messages in wsdump.py (#576) - Resolve issue opening socket to intranet on Windows 10 with no proxy settings but behind proxy (#573) - Expose http connection header to user (#566) - Improve the readability of HTTP status codes. (#553) - fix the compatible issue with gevent+dnspython (#547) - v should be checked for empty string before splitting it (#539) - _handshake: hasattr checks on six before accessing the values (#533) - 0.56.0 - Don't retry sockets with timeout set to 0(#536) - 0.55.0 - Add response headers in WebSocketBadStatusException (#501) - Manually assigning WebSocket-Version (#506) - SSL socket handling fix (#474) - Let setup.py use the same license as LICENSE file (#517) - Ensure that "timeout" is passed down, when calling WebSocket.connect() (#513) - Retry connect on "Interrupted system call" (#528) - 0.54.0 - Change license from LGPL to BSD. - Status return for WebSocketApp.run_forever() (#492) - Handle redirects in handshake (#491) - Make proxy_type option available in WebSocketApp.run_forever() (#486) - Fix typo in supress_origin (#485) - WebSocketApp's on_close never emits status code or reason (#479) - 0.53.0 - on_open() missing 1 required positional argument: 'ws' (#471) - 0.52.0 - fixed callback argument in _app.py (#468) - Fixing none compare bug in run_forever (#472) - Fix NoneType bug introduced by #386 fix (#476) - 0.51.0 - revert "WebSocketApp class to make it inheritable (#442)" because of breaking the compatibility - 0.50.0 - fixed pong before ping (#461) - pass proper arguments to method callbacks (#462) - 0.49.0 - WebSocketApp class to make it inheritable (#442) - Add option to disable sending the Origin header (#459) - Websocket.close() meaning of "close status: XXXXX" (#414) - Enable multithreading protection with ping_interval (#448) - reset WebsocketApp.sock (#450) - websocket.enableTrace not working (#455) - AttributeError: 'module' object has no attribute 'NullHandler' (#443) - WebSocketBadStatusException "not enough arguments for format string" (#454) - handshake should deal with None in headers (#432) - 0.48.0 - Add NullHandler to logger to fix python 2 issue. (#400) - Fix the issue that websocket status message may not present (#403) - Socket error not raised in nested try except in python2 (#408) - Load system default certificates if none are given (#415) - Fix waiting forever on ping/pong timeout (#411) - socks5 via pysocks support (#417) - v0.47.0 breaks ability to stop stream with `run_forever` (#410) - _http.py: fix windows proxy error due to socktype (#427) - 0.47.0 - Fix socket constructor in _open_socket to use all relevant variables from getaddrinfo. (#383) - .send() method is very slow (#340) - cross-platform aync multi-client solution (#375) - Fix detecting timeouts with SSL in recv (#387) - Fix WebSocketApp does not poll for data correctly when using SSL (#384) - Fix Infinite ping/pong timeouts in WebSocketApp.run_forever (#395) - Added status message when HTTP can't be upgraded to WS (#399) - 0.46.0 - fixed OSError on windows (#370) - fixed invalid character (#379) - 0.45.0 - change license to LGP v2.1 - allow reuse of WebsocketApp.run_forever (#365) - Update example for python3 (#360) - add lock to recv function (#356) - Parse close frame response correctly when reason present (#354) - Fix SSL: SSLV3_ALERT_HANDSHAKE_FAILURE on Debian Stretch (#353) - Wrap socket.gaierror with subclass of WebsocketException (#352) - Resolve a proxy issue and a connection error (#345) - Allow empty Host header value (#369) - Fix undefined variable (#347) - fix: getting a value with the key 'ca_certs' in sslopt dict (#326) - 0.44.0 -renames key in sslopt dict (#326) - 0.43.0 - Unknown kwarg 'ca_cert' when calling ssl wrap_socket() (#326) - Race condition in WebSocket ping/pong (#327) - 0.42.0 - Implement simple cookie jar(#292) - fix: when using pppoe redial will block.(#301) - Fix insecure_pythons list in setup.py(#304) - Support WEBSOCKET_CLIENT_CA_BUNDLE being directory(#307) - WebSocketPayloadException under high traffic and limited network connection(#306) - Not working --nocert parameter in wsdump.py(#315) - Avoid the app to block on close on certain systems (#320) - Fix warning is not defined. (#323) - 0.41.0 - move to repository to https://github.com/websocket-client/websocket-client.git - _send_ping warning fails due to missing reference in _logging.__all__ (#294) - 0.40.0 - Fix opcode -> op_code (#286) - 0.39.0 - Shuffled around example code (#256) - _send_ping graceful error handling (#262) - Allow closing WebSocketApp with status/reason/timeout (#265) - Support universal wheels (#267) - _url: Added subnet IP address matching in no_proxy host detection (#270) - fixed Incorrect encoding in continued messages python3 (#261) - Pass headers for websocket handshake (#271) - setup.py: Import `logging` before calling it. (#272) - Implemented close code 1014 (#273) - Support CA bundle specified by environment variable (#279) - Response header values should not be converted to lower case (#264) - 0.38.0 - Exclude port 443 from host http header (#248) - Cleanup code (#249) - Modify a code block directive in README (#250) - fixed ping/pong timeouet (#253) - 0.37.0 - fixed failure that `websocket.create_connection` does not accept `origin` as a parameter (#246 ) - 0.36.0 - added support for using custom connection class (#235) - use Named logger (#238) - implement ping/pong timeout (#241) - Corrects the syntax highlight code (#243) - fixed failure to join thread before it is started (#242) - 0.35.0 - Prints timings in console (#217) - use inspect.getfullargspec with Python 3.x (#219) - Check that exception message is actually a string before trying for substring check (#224) - Use pre-initialized stream socket (#226) - fixed TypeError: cafile, capath and cadata cannot be all omitted (#227) - 0.34.0 - Change import style (#203) - fix attribute error on the older python. (#215) - 0.33.0 - fixed timeout+ssl error handling bug on python 2.7.10 (#190) - add proxy support to wsdump.py (#194) - use wsaccel if available (#193) - add support for ssl cert chains to support client certs (#195) - fix string formatting in exception (#196) - fix typo in README.rst (#197) - introduce on_data callback to pass data type. (#198) - WebSocketBadStatusException for Handshake error (#199) - set close timeout (#192) - Map dict to headers list (#204) - support client certification (#207) - security improvement during handshake (#211) - improve logging of error from callback (#212) - 0.32.0 - fix http proxy bug (#189) - 0.31.0 - Avoid deprecated BaseException.message (#180) - Add travis builds (#182) - fixed wsdump to work with piped input (#183) - fixed output of wsdump.py with python3 (#185) - add raw mode to wsdump.py (#186) - 0.30.0 - fixed if client is behind proxy (#169) - support SNI for python 2.7.9+ and 3.2+ (#172) - update Host HTTP header by user. (#171) - fix typo for isEnabledFor (#173) - can set verify_mode to CERT_NONE when check_hostname is enabled.(#175) - make websockets iterable (#178) - 0.29.0 - fixed ssl socket bug - 0.28.0 - Fix erroneous argument shadowing(#168) - 0.27.0 - remove unittest2 requirements for python 2.6 (#156) - fixed subprotocol case during header validation (#158) - get response status and headers (#160) - fix out-of-memory due to fragmentation when receiving a very large frame(#163) - fix error if the payload data is nothing.(#166) - refactoring. - 0.26.0 - all WebSocketException provide message string (#152) - fixed tests fail when not connected to the network (#155) - Add command line options and handle closed socket to wsdump.py (#153) - 0.25.0 - fixed for Python 2.6(#151) - 0.24.0 - Supporting http-basic auth in WebSocketApp (#143) - fix failure of test.testInternalRecvStrict(#141) - skip utf8 validation by skip_utf8_validation argument (#137) - WebsocketProxyException will be raised if we got error about proxy.(#138) - 0.23.0 - Remove spurious print statement. (#135) - 0.22.0 - Fix not thread-safe of Websocket.close() (#120) - Try to get proxy info from environment if not explicitly provided (#124) - support proxy basic authentication. (#125) - Fix NoneType exception at WebsocketApp.send (#126) - not use proxy for localhost (#132) - 0.21.0 - Check for socket before attempting to close (#115) - Enable turning off SSL verification in wsdump.py(#116) - Enable to set subprotocol(#118) - Better support for Autobahn test suite (http://autobahn.ws/testsuite) (#117) - v0.20.0 - fix typo. - v0.19.0 - suppress close event message(#107) - detect socket connection state(#109) - support for code and reason in on_close callback(#111) - continuation frame handling seems suspicious(#113) - v0.18.0 - allow override of match_hostname usage on ssl (#105) - v0.17.0 - can't set timeout on a standing websocket connection (#102) - fixed local variable 'error' referenced before assignment (#102, #98) - v0.16.0 - lock some method for multithread. (#92) - disable cert verification. (#89) - v0.15.0 - fixed exception when send a large message (#84) - v0.14.1 - fixed to work on Python2.6 (#83) - v0.14.0 - Support python 3(#73) - Support IPv6(#77) - Support explicit web proxy(#57) - specify cookie in connect method option(#82) - v0.13.0 - MemoryError when receiving large amount of data (~60 MB) at once(ISSUE#59) - Controlling fragmentation(ISSUE#55) - server certificate validation(ISSUE#56) - PyPI tarball is missing test_websocket.py(ISSUE#65) - Payload length encoding bug(ISSUE#58) - disable Nagle algorithm by default(ISSUE#41) - Better event loop in WebSocketApp(ISSUE#63) - Skip tests that require Internet access by default(ISSUE#66) - v0.12.0 - support keep alive for WebSocketApp(ISSUE#34) - fix some SSL bugs(ISSUE#35, #36) - fix "Timing out leaves websocket library in bad state"(ISSUE#37) - fix "WebSocketApp.run_with_no_err() silently eats all exceptions"(ISSUE#38) - WebSocketTimeoutException will be raised for ws/wss timeout(ISSUE#40) - improve wsdump message(ISSUE#42) - support fragmentation message(ISSUE#43) - fix some bugs - v0.11.0 - Only log non-normal close status(ISSUE#31) - Fix default Origin isn't URI(ISSUE#32) - fileno support(ISSUE#33) - v0.10.0 - allow to set HTTP Header to WebSocketApp(ISSUE#27) - fix typo in pydoc(ISSUE#28) - Passing a socketopt flag to the websocket constructor(ISSUE#29) - websocket.send fails with long data(ISSUE#30) - v0.9.0 - allow to set opcode in WebSocketApp.send(ISSUE#25) - allow to modify Origin(ISSUE#26) - v0.8.0 - many bug fix - some performance improvement - v0.7.0 - fixed problem to read long data.(ISSUE#12) - fix buffer size boundary violation - v0.6.0 - Patches: UUID4, self.keep_running, mask_key (ISSUE#11) - add wsdump.py tool - v0.5.2 - fix Echo App Demo Throw Error: 'NoneType' object has no attribute 'opcode (ISSUE#10) - v0.5.1 - delete invalid print statement. - v0.5.0 - support hybi-13 protocol. - v0.4.1 - fix incorrect custom header order(ISSUE#1)