android - socket.io Android 库认证

标签 android node.js socket.io sails.js socket.io-java-client

我使用这个库 ( 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/

相关文章:

java - Android 2.3.3 媒体播放器出现 NullPointerException

node.js - TypeError : webpack. DefinePlugin 不是构造函数

node.js - 套接字IO : Number of users in a room

socket.io - 带有 istio 的 GKE 上的 websockets 给出 'no healthy upstream' 和 'CrashLoopBackOff'

android - 来自支持库与设计库的抽屉导航

java - Android Java Http 请求发布

android - java.lang.noclassdefounderror : org. ksoap2.serialization.SoapObject

node.js - NPM:在具有nvm的Windows 10上运行npm -v时找不到npm-cli.js

javascript - res.write 没有返回预期值

javascript - 在将socket.io错误发送到控制台之前,我可以捕获它吗?