【问题标题】:How to add headers in Java Websocket client如何在 Java Websocket 客户端中添加标头
【发布时间】:2015-09-15 21:19:13
【问题描述】:

我正在使用 javax.websocket 类连接到 Java 中的 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。客户端有类似的解决方案吗?

【问题讨论】:

    标签: java websocket java-websocket


    【解决方案1】:

    @987654321@.@987654322@.@987654323@(Map&lt;String,List&lt;String&gt;&gt; <b>headers</b>) 可能可用。

    关于参数<b>headers</b> 的JavaDoc 如下所述:

    实现即将发送的握手请求标头的可变映射以启动握手交互。

    那么,你为什么不重写<b>@987654324@</b> 方法呢?

    @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);
    }
    

    您可以将@987654325@ 传递给@987654326@(Class&lt;? extends Endpoint&gt; endpointClass, @987654327@ cec, URI path)

    【讨论】:

      【解决方案2】:
      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);
          }
      }
      

      【讨论】:

        【解决方案3】:
        Builder configBuilder = ClientEndpointConfig.Builder.create();
        configBuilder.configurator(new Configurator() {
            @Override
            public void beforeRequest(Map<String, List<String>> headers) {
            headers.put("Cookie", Arrays.asList("JSESSIONID=" + sessionID));
            }
        });
        ClientEndpointConfig clientConfig = configBuilder.build();
        webSocketContainer.connectToServer(MyClientEndpoint.class, clientConfig, new URI(uri));
        

        【讨论】:

          【解决方案4】:

          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));
          
          }
          

          【讨论】:

            猜你喜欢
            • 2013-01-05
            • 2018-05-05
            • 1970-01-01
            • 1970-01-01
            • 2013-09-24
            • 2017-12-20
            • 1970-01-01
            • 2021-05-13
            • 2021-02-11
            相关资源
            最近更新 更多