【问题标题】:socket.io Android library authenticationsocket.io Android 库认证
【发布时间】:2016-01-12 15:39:54
【问题描述】:

我使用这个库 (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 需要身份验证。那么如何修改套接字标头以放置 Cookie 并保持套接字和 Web 服务之间的会话?

【问题讨论】:

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


    【解决方案1】:

    这是图书馆开发人员的答案: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);
          }
        });
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 2016-04-24
      • 2018-04-14
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      相关资源
      最近更新 更多