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

я подключаюсь к серверу 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. Есть ли аналогичное решение на стороне клиента?

2 ответов


ClientEndpointConfig.Configurator.beforeRequest(Map<String,List<String>> headers) может быть полезной.

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

the mutable карта заголовков запроса рукопожатия реализация собирается отправить, чтобы начать взаимодействие рукопожатия.

Итак, почему бы вам не переопределить 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).


public class Config extends ClientEndpointConfig.Configurator{
    @Override
    public void beforeRequest(Map<String, List<String>> headers) {
        headers.put("Pragma", Arrays.asList("no-cache"));
        headers.put("Origin", Arrays.asList("https://www.bcex.ca"));
        headers.put("Accept-Encoding", Arrays.asList("gzip, deflate, br"));
        headers.put("Accept-Language", Arrays.asList("en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4"));
        headers.put("User-Agent", Arrays.asList("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"));
        headers.put("Upgrade", Arrays.asList("websocket"));
        headers.put("Cache-Control", Arrays.asList("no-cache"));
        headers.put("Connection", Arrays.asList("Upgrade"));
        headers.put("Sec-WebSocket-Version", Arrays.asList("13"));
    }

    @Override
    public void afterResponse(HandshakeResponse hr) {
        Map<String, List<String>> headers = hr.getHeaders();
        log.info("headers -> "+headers);
    }
}