【问题标题】:How to hit the WebSocket Endpoint?如何访问 WebSocket 端点?
【发布时间】:2014-09-02 10:55:03
【问题描述】:

我看到有一个 websocket 端点可以通过 Java 测试解决问题。在日志中我看到了

Connecting to: ws://127.0.0.1:8080/76f48a44-0af8-444c-ba97-3f1ed34afc91/tweets  

就像任何其他 REST API 一样,我想通过浏览器或 curl 访问它,但是当我这样做时,我看到了

➜  tweetstream git:(master) ✗ curl ws://127.0.0.1:8080/b9b90525-4cd4-43de-b893-7ef107ad06c2/tweets  
curl: (1) Protocol ws not supported or disabled in libcurl  

➜  tweetstream git:(master) ✗ curl http://127.0.0.1:8080/b9b90525-4cd4-43de-b893-7ef107ad06c2/tweets
<html><head><title>Error</title></head><body>Not Found</body></html>%  

有没有办法用浏览器/curl 测试 websocket API?

【问题讨论】:

  • Websockets 不像 HTTP 那样是一个 RESTful 协议。确保为工作使用正确的工具。
  • 您知道合适的工具吗?我对 websockets 很陌生

标签: javascript curl websocket


【解决方案1】:

如果你的意思是测试 websockets 的实现,我发现 Autobahn 的测试套件非常有用:http://autobahn.ws/

如果您只是想使用 websocket 我建议您在 chrome 等浏览器中使用开发人员工具来建立连接并发送/接收数据:

var ws = new WebSocket("ws://127.0.0.1:8080/76f48a44-0af8-444c-ba97-3f1ed34afc91/tweets");
ws.onclose = function() { // thing to do on close
};
ws.onerror = function() { // thing to do on error
};
ws.onmessage = function() { // thing to do on message
};
ws.onopen = function() { // thing to do on open
};
ws.send("Hello World");

【讨论】:

    【解决方案2】:

    这对我有用:

    $ curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: echo.websocket.org" -H "Origin: http://www.websocket.org" http://echo.websocket.org
    

    来自:http://www.thenerdary.net/post/24889968081/debugging-websockets-with-curl

    【讨论】:

    • 没有端点,它只是测试根 url。我认为最初的问题是关于特定端点,例如 ip:port/endpoint/
    【解决方案3】:

    我写了一个类似 WebSocket 客户端的 cURL。您可以通过此工具发送单个数据帧(文本/二进制),然后关闭套接字。您还可以在初始 HTTP 升级过程中添加 HTTP 标头。

    https://github.com/jussmen/WebSocket_cURL

    【讨论】:

    • 如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。 - From Review
    • @CastroRoy,嗯,虽然我没有测试它是否有效,但它似乎是一个合法的答案。
    • 任何人发现这个,应用程序不工作或不再工作,用 python2 和 python3 测试。
    【解决方案4】:

    我必须使用这个命令才能让它工作:

    $ curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: echo.websocket.org" -H "Origin: http://www.websocket.org" -H "Sec-WebSocket-Version: 13" -H 'Sec-WebSocket-Key: +onQ3ZxjWlkNa0na6ydhNg==' http://www.websocket.org
    

    我正在使用 Jetty,如果我没有添加 Sec-WebSocket-Version/Sec-WebSocket-Key 不起作用。仅作记录。

    【讨论】:

      【解决方案5】:

      我用过这个,发现很简单

      http://www.websocket.org/echo.html

      【讨论】:

        【解决方案6】:

        为了完整起见,我想添加自己的 CLI 工具:websocat

        $ websocat wss://echo.websocket.org/
        qwer
        qwer
        1234
        1234
        

        它不做问题的“浏览器”部分,但在这种情况下应该是“curl”的有效替代品。

        【讨论】:

          【解决方案7】:
          curl --include \
          --no-buffer \
          --header "Connection: Upgrade" \
          --header "Upgrade: websocket" \
          --header "Host: echo.websocket.org" \
          --header "Origin: http://echo.websocket.org" \
          --header "Sec-WebSocket-Version: 13" \
          http://echo.websocket.org
          
          

          如果您为 WebSocket 端点配置了额外的子协议,请添加标头:

          --header "Sec-protocol: protocol-name"
          

          替换您的 Origin、Host 和 endpoint 以使用您自己的服务器进行测试。如果您启用了基本身份验证,请添加 Authorization 标头,如下所示:

           --header "Authorization: Basic RVZCLVAxNzI2MzAzOv"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-05-29
            • 2015-07-19
            • 2021-11-08
            • 2020-10-21
            • 2019-11-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多