由于扩展协商错误,Karate WebSocket连接失败



使用karate.webSocket():连接到WebSocket服务器时出现以下异常

org.graalvm.polyglot.PolyglotException: karate.io.netty.handler.codec.CodecException: invalid WebSocket Extension handshake for "permessage-deflate; server_no_context_takeover; client_no_context_takeover"
- com.intuit.karate.http.WebSocketClient.<init>(WebSocketClient.java:144)
- com.intuit.karate.core.ScenarioEngine.webSocket(ScenarioEngine.java:731)
- com.intuit.karate.core.ScenarioBridge.webSocket(ScenarioBridge.java:861)

服务器响应具有标题

Sec-WebSocket-Extensions: permessage-deflate; server_no_context_takeover; client_no_context_takeover

根据规范https://www.rfc-editor.org/rfc/rfc7692#section-7.1.1.1,服务器可以将其包含在响应标头中。

尝试在options中指定相同的标头,但仍然失败。

有办法解决这个问题吗?

这肯定是我们还不支持的情况。如果你能遵循这个过程,希望你能找到一个公共端点来模拟或尝试创建一种本地方式,那就太好了——最好是通过java/nety,或者如果更方便的话,你可以使用一些JS lib等。

说明:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

当然,如果你也可以提供指针或PR,那就另当别论了。这里有一个过去类似对话的例子:在打开WebSocket连接时,有没有办法使用自定义标头?