【问题标题】:POST and PUT via Socket.IO in Java在 Java 中通过 Socket.IO POST 和 PUT
【发布时间】:2015-03-22 19:10:03
【问题描述】:

我正在使用nkzawa's Socket.IO-client.java 开发一个 Android 客户端,但不知道如何通过套接字使用请求正文中的数据发出 POST 或 PUT 请求。

我已经成功地执行了一个 GET 请求,它是这样完成的:

...
JSONObject obj = new JSONObject();
obj.put("url", "/list/subscribe/");
socket.emit("get", obj);
...

我尝试将“get”与“put”和“post”交换,并尝试将“data”和“body”添加到 JSONObject,但没有成功。收到的请求正文在服务器上保持为空。

制作post request with data in Sails.js 很容易,而这正是我想用Java 客户端做的。这可能吗?

【问题讨论】:

  • 有什么理由不想使用 Android 的 HttpURLConnection (developer.android.com/reference/java/net/HttpURLConnection.html)?它支持所有常用的 HTTP 方法,包括 POST 和 PUT。
  • 原因是我想让请求通过套接字,我认为HttpURLConnection不可能,但也许我错了?
  • GET、POST 和 PUT 请求是 HTTP 协议的一部分。出于某种原因(github.com/balderdashy/sails.io.js/blob/master/…),Sails 似乎正试图在 Socket.IO 之上模拟这一点。我觉得很奇怪!
  • @gregnr 是的,当你这样说时,通过 Socket.IO(或 WebSockets)发送 HTTP 请求听起来有点奇怪。虽然,我在最初的帖子中写的 get 请求用于为请求套接字订阅事件。如果不通过套接字发送 HTTP 请求,我不知道如何做到这一点。

标签: java android socket.io sails.js


【解决方案1】:

这里有一个解决方案。

  1. 您需要将另一个 JSONObject 作为数据传递

    JSONObject jsonObjectBody = new JSONObject();
    try {
        jsonObjectBody.put("sender", senderId);
        jsonObjectBody.put("recipient", recipientId);
        jsonObjectBody.put("message", message);
        jsonObjectBody.put("shop", shopId);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    
    
    JSONObject jsonObjectRequest = new JSONObject();
    try {
        jsonObjectRequest.put("url", "/v1/chat/client/messages");
        jsonObjectRequest.put("data", jsonObjectBody);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    
    socketInstance.emit("post", jsonObjectRequest, new Ack() {
        @Override
        public void call(Object... args) {
            Log.e("SocketUtil", "User sent a message");
        }
    });
    
  2. 然后在服务器端你可以这样获取正文:

    const body = req.body;
    

【讨论】:

    猜你喜欢
    • 2014-02-11
    • 2012-11-27
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多