2015-06-29 4 views
6

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

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 для запроса на стороне клиента

Возможно ли это?

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

ответ

8

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

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

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

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

0
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); 
    } 
} 
Смежные вопросы