Client - websockets 12.0 documentation
Description: Why does the client close the connection prematurely?: You’re exiting the context manager prematurely. Wait for the work to be finished before exiting. For example, if your code has a structure sim...

Hide navigation sidebar
Hide table of contents sidebar
Back to top
Toggle table of contents sidebar

# Client

## Why does the client close the connection prematurely?

You’re exiting the context manager prematurely. Wait for the work to be finished before exiting.

For example, if your code has a structure similar to:

    async with connect(...) as websocket:
        asyncio.create_task(do_some_work())

change it to:

    async with connect(...) as websocket:
        await do_some_work()

## How do I access HTTP headers?

Once the connection is established, HTTP headers are available in `request_headers` and `response_headers`.

## How do I set HTTP headers?

To set the `Origin`, `Sec-WebSocket-Extensions`, or `Sec-WebSocket-Protocol` headers in the WebSocket handshake request, use the `origin`, `extensions`, or `subprotocols` arguments of `connect()`.

To override the `User-Agent` header, use the `user_agent_header` argument. Set it to `None` to remove the header.

To set other HTTP headers, for example the `Authorization` header, use the `extra_headers` argument:

    async with connect(..., extra_headers={"Authorization": ...}) as websocket:
        ...

In the `threading` API, this argument is named `additional_headers`:

    with connect(..., additional_headers={"Authorization": ...}) as websocket:
        ...

## How do I force the IP address that the client connects to?

Use the `host` argument of `create_connection()`:

    await websockets.connect("ws://example.com", host="192.168.0.1")

`connect()` accepts the same arguments as `create_connection()`.

## How do I close a connection?

The easiest is to use `connect()` as a context manager:

    async with connect(...) as websocket:
        ...

The connection is closed when exiting the context manager.

## How do I reconnect when the connection drops?

Use `connect()` as an asynchronous iterator:

    async for websocket in websockets.connect(...):
        try:
            ...
        except websockets.ConnectionClosed:
            continue

Make sure you handle exceptions in the `async for` loop. Uncaught exceptions will break out of the loop.

## How do I stop a client that is processing messages in a loop?

You can close the connection.

Here’s an example that terminates cleanly when it receives SIGTERM on Unix:

    #!/usr/bin/env python

    import asyncio
    import signal
    import websockets

    async def client():
        uri = "ws://localhost:8765"
        async with websockets.connect(uri) as websocket:
            # Close the connection when receiving SIGTERM.
            loop = asyncio.get_running_loop()
            loop.add_signal_handler(
                signal.SIGTERM, loop.create_task, websocket.close())

            # Process messages received on the connection.
            async for message in websocket:
                ...

    asyncio.run(client())

## How do I disable TLS/SSL certificate verification?

Look at the `ssl` argument of `create_connection()`.

`connect()` accepts the same arguments as `create_connection()`.