Skip to content

Instantly share code, notes, and snippets.

@njsmith
Last active October 30, 2018 17:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save njsmith/2bd3e54649379ecadf8a699c7bb8bcb3 to your computer and use it in GitHub Desktop.
Save njsmith/2bd3e54649379ecadf8a699c7bb8bcb3 to your computer and use it in GitHub Desktop.
import h11
def write_headers_titlecase(headers, write):
for name, value in headers:
if name == b"host":
write(b"%s: %s\r\n" % (name.title(), value))
for name, value in headers:
if name != b"host":
write(b"%s: %s\r\n" % (name.title(), value))
write(b"\r\n")
h11._writers.write_headers = write_headers_titlecase
@bradwood
Copy link

Thanks @njsmith

Turns out it needed this, after all:

def write_headers_titlecase(headers, write):
    # RFC says Host: header SHOULD be written out first.
    for name, value in headers:
        if name == b"host":
            write(b"%s: %s\r\n" % (name.title(), value))
    for name, value in headers:
        if name == b"upgrade":
            write(b"%s: %s\r\n" % (name.title(), value.lower()))  # SkyQ doesn't like 'WebSocket', it wants 'websocket'
        elif name != b"host":
            write(b"%s: %s\r\n" % (name.title(), value))
    write(b"\r\n")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment