我使用这个库 ( https://github.com/socketio/socket.io-client-java ) 将我的 Android 应用程序与我的 Sails socket.io 连接起来。
这是我使用的代码:
final Socket socket = IO.socket(Constants.LOCAL_URL+"?__sails_io_sdk_version=0.11.0");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener()
{
@Override
public void call(Object... args)
{
JSONObject obj1 = new JSONObject();
try {
obj1.put("url","/rest/room");
} catch (JSONException e) {
e.printStackTrace();
}
socket.emit("get", obj1, new Ack() {
@Override
public void call(Object... args) {
Log.e("test", "GET");
}
});
Log.e("test", "CONNECT");
}
}).on("room", new Emitter.Listener()
{
@Override
public void call(Object... args)
{
Log.e("test", "ROOM");
}
});
但是我有一个 403 原因 URL 需要身份验证。那么如何修改套接字 header 以放置 Cookie
并保持套接字和 Web 服务之间的 session ?
最佳答案
这是图书馆开发人员的回答:https://github.com/socketio/socket.io-client-java/issues/226
socket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener() {
@Override
public void call(Object... args) {
Transport transport = (Transport)args[0];
transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() {
@Override
public void call(Object... args) {
@SuppressWarnings("unchecked")
Map<String, List<String>> headers = (Map<String, List<String>>)args[0];
// modify request headers
headers.put("Cookie", Arrays.asList("foo=1;"));
}
});
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 cookie = headers.get("Set-Cookie").get(0);
}
});
}
});
关于android - socket.io Android 库认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33127213/