在Socket.io-client中发送自定义头。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Socket.io-client中发送自定义头。相关的知识,希望对你有一定的参考价值。

我在发送自定义头时遇到了一个问题。socket.io-client. 在服务器端集成代码一切正常,因为ios代码工作正常。这是我在iOS中的代码。

let manager = SocketManager(socketURL: URL(string: "http://server_url_here/")!, 
                            config: [.log(true), 
                                     .compress, .extraHeaders(["Authorization": "Bearer \(Defaults[.authToken])"])])

现在我尝试了socket.io-client文档中提到的方法,这是我使用的代码。

final OkHttpClient httpClient = new OkHttpClient.Builder()
                    .addNetworkInterceptor(new CustomHeaderInterceptor())
                    .build();

//options    
final IO.Options options = new IO.Options();

options.webSocketFactory = httpClient;
options.callFactory = httpClient;

//manager
Manager manager = new Manager(URI.create(Constants.BASEURL));
socket = manager.socket("/event/0", options);

socket.connect();

但这是在socket错误处理程序中给出的错误。

io.socket.engio.client.engioexception xhr post error(错误)

我也试过用下面这段代码,但没有用。

socket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener() 
    @Override
    public void call(Object... args) 
        Transport transport = (Transport) args[0];
        // Adding headers when EVENT_REQUEST_HEADERS is called
        transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() 
            @Override
            public void call(Object... args) 
                Map<String, List<String>> mHeaders = (Map<String, List<String>>)args[0];
                mHeaders.put("Authorization", Arrays.asList(auth_token_with_bearer));        
            
        );
        transport.on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() 
            @Override
            public void call(Object... args) 
                @SuppressWarnings("unchecked")
                Map<String, List<String>> headers = (Map<String, List<String>>)args[0];
                // access response headers
                String auth = headers.get("Authorization").get(0);


            
        );
    
);

我读了很多关于这个问题的帖子,但没有一个对我有用。请让我知道我现在错在哪里。

答案
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

httpClient.addInterceptor(new Interceptor() 

@Override
public Response intercept(Interceptor.Chain chain) throws IOException 
    Request original = chain.request();

    Request request = original.newBuilder()
        .header("User-Agent", "Your-App-Name")
        .header("Accept", "application/json")
        .header("your_header_key", "value")
        .method(original.method(), original.body())
        .build();

    return chain.proceed(request);



 OkHttpClient client = httpClient.build();

以上是关于在Socket.io-client中发送自定义头。的主要内容,如果未能解决你的问题,请参考以下文章

将 socket.io-client 与 webpack 一起使用时未定义 global

在 socket.io-client 中调用 IO 时出错,角度 8

socket.io-client + react,在哪里连接服务器?

无法在 Angular 项目中导入 socket.io-client

在 create-react-app 中使用 Socket.io-client 的 WebSockets 代理

如何在 Angular 2 应用程序中导入 socket.io-client?