简体   繁体   中英

Gatling: WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request

I'm trying to open ws connection, but get the error:

val openConnection = exec( ws("Connect -> WS").wsName("user").connect("wss://socket.develop.test.com?access_token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9"))

Then, I get:

09:49:53.343 [DEBUG] i.g.h.c.i.DefaultHttpClient - Installing SslHandler for wss://socket.develop.test.com?access_token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
09:49:53.381 [DEBUG] i.n.h.s.u.InsecureTrustManagerFactory - Accepting a server certificate: CN=Kubernetes Ingress Controller Fake Certificate, O=Acme Co
09:49:53.418 [DEBUG] i.n.h.c.h.w.WebSocketClientHandshaker13 - WebSocket version 13 client handshake key: YndmXwIGgZseWyRlmXBoyw==, expected response: H2YGNn6p+DyLyudnc1JCluHjj7E=
09:49:53.419 [DEBUG] i.g.h.c.i.WebSocketHandler - ctx.write msg=DefaultFullHttpRequest(decodeResult: success, version: HTTP/1.1, content: EmptyByteBufBE)
GET ?access_token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
HTTP/1.1
    accept: */*
    upgrade: websocket
    connection: upgrade
    sec-websocket-key: YndmXwIGgZseWyRlmXBoyw==
    host: socket.develop.test.com
    origin: https://socket.develop.test.com
    sec-websocket-version: 13
    09:49:53.423 [DEBUG] i.n.h.s.SslHandler - [id: 0xfa53644a, L:/192.168.150.134:54082 - R:socket.develop.test.com/78.47.16.48:443] HANDSHAKEN: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    09:49:53.450 [DEBUG] i.g.h.c.i.WebSocketHandler - Read msg=HttpObjectAggregator$AggregatedFullHttpResponse(decodeResult: success, version: HTTP/1.1, content: CompositeByteBuf(ridx: 0, widx: 163, cap: 163, components=1))
    HTTP/1.1 400 Bad Request
    Server: openresty/1.15.8.1
    Date: Tue, 10 Mar 2020 06:49:53 GMT
    Content-Type: text/html
    Content-Length: 163
    Connection: close
    09:49:53.452 [DEBUG] i.g.h.c.i.WebSocketHandler - Crash
    io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request
        at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:267)

In gatling.conf, I set also:

enableSni = false
useOpenSsl = false
enableHostnameVerification = false

If I try to open connection with any WS clients like SmartWebsocketClient - everything is ok, but by means of gatling I can't to open connection. Any ideas to fix it?

wss://domain?access_token... is not a valid URL. The path component must start with a / and not a ? . This means that the request is invalid which can explain the response of 400 Bad Request .

The URL must be at least wss://domain/?access_token... (ie a / before the ? ) but maybe the rest of the URL is unexpected by the server too. Please check the actual requirements of the server.

This is a bug in Netty that doesn't properly compute WebSocket handshake request url when path is empty. I've just contributed a patch: https://github.com/netty/netty/pull/10095 . Sibling issue in Gatling: https://github.com/gatling/gatling/issues/3876

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM