Instantly share code, notes, and snippets.

Embed
What would you like to do?
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/
@karthikdivi

This comment has been minimized.

karthikdivi commented Feb 10, 2017

Thanks for the information. Will this curl causes a websocket connection leak if i don't kill the command?

@wachpwnski

This comment has been minimized.

wachpwnski commented Apr 21, 2017

I keep getting

HTTP/1.1 400 bad Sec-WebSocket-Key (length must be 24 ASCII chars) 'SGVsbG8sIHdvcmxkIQ=='

Where do I get this key from?

@silvioprog

This comment has been minimized.

silvioprog commented May 4, 2017

@wachpwnski try using this:

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: echo.websocket.org" -H "Origin: https://www.websocket.org" https://echo.websocket.org
@moolitayer

This comment has been minimized.

moolitayer commented Jul 30, 2017

I keep getting

HTTP/1.1 400 bad Sec-WebSocket-Key (length must be 24 ASCII chars) 'SGVsbG8sIHdvcmxkIQ=='
Where do I get this key from?

You don't need a specific key - the one supplied here should work.
The pourpose of that header is to prevent caching of websocket requests.

See https://en.wikipedia.org/wiki/WebSocket#Protocol_handshake

@prayagupd

This comment has been minimized.

prayagupd commented Dec 4, 2017

I get 400 error,

curl -i --no-buffer -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: localhost:9191" -H "Origin: http://localhost:9191" -H "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" -H "Sec-WebSocket-Version: 13" localhost:9191/chat?q=a
HTTP/1.1 400 Bad Request
Server: akka-http/10.0.10
Date: Mon, 04 Dec 2017 08:36:32 GMT
Content-Type: text/plain; charset=UTF-8
Content-Length: 34

Expected WebSocket Upgrade request

It works when I use Dark WSock terminal(a chrome plugin).

Akka Http Endpoint

  val handle: Flow[Message, Message, _] = Flow[Message].map {
    case TextMessage.Strict(event) =>
      sentimentProcessor ? event match {
        case emitted: Seq[ActionResult] =>
          TextMessage(emitted.head)
      }
    case _ => TextMessage("Event type unsupported")
  }

      path("chat") {
        get {
          handleWebSocketMessages(handle)
        }
      }
@laredotornado

This comment has been minimized.

laredotornado commented Mar 22, 2018

What if you want to send data on the web socket? Right now it looks like you're just sending a bunch of headers. I assume "--no-buffer" means there is no data being sent to the endpoint.

@jageee

This comment has been minimized.

jageee commented Mar 27, 2018

this command works for me:
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: echo.websocket.org" -H "Origin: https://www.websocket.org" https://echo.websocket.org

did anybody try same command using TLS? to "wss://echo.websocket.org"

@P-Medicado

This comment has been minimized.

P-Medicado commented Mar 30, 2018

@jageee I tried your above command and Mac OS returned, "no URL Specified!" And also https://echo.websocket.org returns 404 if visited.

@vi

This comment has been minimized.

vi commented Jul 4, 2018

I'd like to advertise my new tool websocat. It is designed to make easy to do tricky things with websockets.

You can check availability of a web socket without transferring any data:

$ websocat -q -uU ws://echo.websocket.org/ 2> /dev/null; echo  $?
0
$ websocat -q -uU ws://echo.websocket.org/404 2> /dev/null; echo  $?
1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment