Как добавить заголовки в клиент Java Websocket

Я подключаюсь к серверу веб-сокетов на Java, используя классы javax.websocket.

import javax.websocket.DeploymentException;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
import java.io.IOException;
import java.net.URI;

public class WSClient {
    private WebSocketContainer webSocketContainer;

    public void sendMessage(URI endpointURI, String message) throws IOException, DeploymentException {
        Session session = webSocketContainer.connectToServer(MyClientEndpoint.class, endpointURI);
        session.getAsyncRemote().sendText(message);
    }
}

Для первоначального рукопожатия HTTP я хочу добавить дополнительные заголовки HTTP в запрос на клиентской стороне

Это возможно?

Я знаю, что это возможно на стороне сервера, используя ServerEndpointConfig.Configurator.modifyHandshake. Есть ли подобное решение на стороне клиента?


person kavai77    schedule 29.06.2015    source источник


Ответы (2)


ClientEndpointConfig.Configurator.beforeRequest(Map<String,List<String>> headers) можно использовать.

JavaDoc об аргументе headers говорит следующее:

the mutable map of handshake request headers the implementation is about to send to start the handshake interaction.

Итак, почему бы вам не переопределить метод beforeRequest, как показано ниже?

@Override
public void beforeRequest(Map<String,List<String>> headers)
{
    List<String> values = new ArrayList<String>();
    values.add("My Value");

    headers.put("X-My-Custom-Header", values);
}

Вы можете передать ClientEndpointConfig в connectToServer(Class<? extends Endpoint> endpointClass, ClientEndpointConfig cec, URI path).

person Takahiko Kawasaki    schedule 30.06.2015

Обновление 2020. Вот как это предложило сообщество IntelliJ:

  public WsClient(String uri) throws Exception {

    ClientEndpointConfig.Builder configBuilder = ClientEndpointConfig.Builder.create();

    configBuilder.configurator(new ClientEndpointConfig.Configurator() {
        public void beforeRequest(Map<String, List<String>> headers) {
            headers.put("FriendlyName", Arrays.asList("TakaTurautin"));
        }
    });
    ClientEndpointConfig clientConfig = configBuilder.build();
    WebSocketContainer container = ContainerProvider.getWebSocketContainer();

    container.connectToServer(this, clientConfig, URI.create(uri));

}
person Kurskinen    schedule 21.05.2020