es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El cliente de StompClient en Android no logra conectarse con el servidor SpringBoot, mostrando el error “Se esperaba una respuesta HTTP 101 pero se obtuvo ‘400’”.

Estoy utilizando la siguiente biblioteca para la implementación de StompClient en mi código nativo de Android:

Biblioteca StompClient

Se conecta a la misma URL con “HTTP”, pero cuando uso “HTTPS” no se conecta y arroja la siguiente excepción:

Excepción: java.lang.Exception: java.net.ProtocolException: Se esperaba una respuesta HTTP 101 pero se recibió ‘400’

Aquí está mi código:

private var stompClient: StompClient = Stomp.over(Stomp.ConnectionProvider.OKHTTP, STOMP_URL)

stompClient.connect()

disposable = stompClient.topic(“/rooms/roomId”)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ topicMessage ->
Log.d(“LiveChatStomp”, “Mensaje ${topicMessage.payload}”)
}, {
Log.d(“LiveChatStomp”, “Ocurrió una excepción: ${it}”)
Toast.makeText(context, “error”, Toast.LENGTH_SHORT).show()
})

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con el uso de una conexión HTTPS en lugar de HTTP. La biblioteca StompClient está configurada actualmente para utilizar HTTP de forma predeterminada. Sin embargo, si desea cambiar a HTTPS, debe modificar el método del constructor de la siguiente manera:

    private var stompClient: StompClient = Stomp.over(
          Stomp.ConnectionProvider.OKHTTP,
          "wss://" + STOMP_URL.host + STOMP_URL.path
    )
    

    Con el código anterior, STOMP_URL se convertirá de HTTP a HTTPS. Tenga en cuenta que también debe actualizar la URL del WebSocket de ws:// a wss:// por motivos de seguridad.

Comments are closed.