Skip to content

Instantly share code, notes, and snippets.

@htp
Last active March 25, 2026 18:35
Show Gist options
  • Select an option

  • Save htp/fbce19069187ec1cc486b594104f01d0 to your computer and use it in GitHub Desktop.

Select an option

Save htp/fbce19069187ec1cc486b594104f01d0 to your computer and use it in GitHub Desktop.
Test a WebSocket using curl.
curl --include \
--no-buffer \
--header "Connection: Upgrade" \
--header "Upgrade: websocket" \
--header "Host: example.com:80" \
--header "Origin: http://example.com:80" \
--header "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" \
--header "Sec-WebSocket-Version: 13" \
http://example.com:80/
@rajsek
Copy link
Copy Markdown

rajsek commented Mar 25, 2026

Just got to know about this so posting here to help others

WebSocket has been supported by curl as a non-experimental feature since version 8.11.0 (November 6 2024). With the upcoming release of version 8.16.0, we are taking it a step further.

With that release, you can use WebSocket in a pipe from the command line. Like this:

curl --no-progress-meter -T . -N wss://echo.websocket.org/
Request served by 4d896d95b55478dsadsa
Hello!
Hello!
you just echo what I send?
you just echo what I send?
...

This command line contacts the “echo” server run by websocket.org which just sends back what it receives from the client. The command line options are:

-T .: tells curl to upload the data from stdin, in non-blocking fashion.
-N: to avoid buffering of output data, so that even a single character received from the server is on stdout right away.
--no-progress-meter: to avoid curl cluttering stderr with information about how much was sent/received.

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