У меня проблема при отправке настраиваемого заголовка в 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();
Но это дает ошибку в обработчике ошибок сокета:
io.socket.engineio.client.engineioexception 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);
}
});
}
});
Я прочитал много тем, связанных с этой проблемой, но ни один из них не работает для меня. Пожалуйста, дайте мне знать, в чем я сейчас ошибаюсь.