2015-06-29 28 views
6

Tôi đang kết nối với máy chủ websocket trong Java bằng cách sử dụng các lớp javax.websocket.Cách thêm tiêu đề vào máy khách 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); 
    } 
} 

Đối với những cái bắt tay HTTP ban đầu tôi muốn bổ sung thêm Headers HTTP để yêu cầu ở phía Khách hàng

Đây có phải là có thể?

Tôi biết rằng điều này có thể thực hiện ở phía máy chủ sử dụng . Có một giải pháp tương tự ở phía khách hàng không?

Trả lời

8

ClientEndpointConfig . Configurator . beforeRequest (Map<String,List<String>> headers) có thể sử dụng được.

Các javadoc về lập luận headers nói như sau:

bản đồ mutable đề nghị bắt tay Headers việc thực hiện sắp gửi để bắt đầu sự tương tác bắt tay.

Vì vậy, tại sao bạn không ghi đè phương pháp beforeRequest như dưới đây?

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

Bạn có thể vượt qua ClientEndpointConfig đến 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); 
    } 
} 
Các vấn đề liên quan