[英]Send custom header in Socket.io-client
在socket.io-client中發送自定義 header 時遇到問題。 服務器端集成/代碼一切正常,因為 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 錯誤
我也嘗試使用下面的代碼但不工作:
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.