【问题标题】:Sending JSON to parse.com using request body使用请求正文将 JSON 发送到 parse.com
【发布时间】:2016-01-01 09:50:28
【问题描述】:

我在 Android 中向 parse.com 发送一个发布请求,并且需要将标头和正文包含在单个 json 对象中作为发布请求正文。 这可能是这样吗(很可能不是因为我从 parse.com 响应中收到错误消息:

{
"headers": [
    {
"Content-Type":"application/json",
"X-Parse-Application-Id":"key1",
"X-Parse-REST-API-Key":"key2"

"body": [
    {
        "ephrase": "When the going gets tough, the tough get going.",
        "nvote": 154,
        "pphrase": "Meaning2",
        "yvote": 364
    },
    {
        "ephrase": "Beggars can't be choosers.",
        "nvote": 1,
        "pphrase": "meaning1",
        "yvote": 8
    }
] } 

如果这不起作用,我正在尝试以下操作,但仍然从 parse.com 收到错误“107 invalid utf-8 tsring was provided”

我把它包含在图片的标题部分:

"Content-Type":"application/json",
"X-Parse-Application-Id":"key1",
"X-Parse-REST-API-Key":"key2"

这在 parse.com 需要一个 json 对象的正文部分中

{ [
    {
        "ephrase": "When the going gets tough, the tough get going.",
        "nvote": 154,
        "pphrase": "",
        "yvote": 364
    },
    {
        "ephrase": "Beggars can't be choosers.",
        "nvote": 1,
        "pphrase": "",
        "yvote": 8
    }
] }

【问题讨论】:

  • 您从哪里发送此请求?你用什么客户端来打这个电话?
  • 您在上面发布了错误的 json 结构。请确保它是提取的
  • 为什么需要在头部发送密钥?这些对你的应用程序来说应该是秘密的。
  • Parse 要求您在标头中发送密钥

标签: android json parse-platform


【解决方案1】:

在正文中添加标头不是很好的做法,标头需要单独发送。

如果您使用 HTTPPost 发送请求,则可以使用 addheader 函数添加标头

httppost.addHeader("YOUR-KEY", "YOUR-value");

在你的情况下,这将是

 httppost.addHeader("Content-Type", "application/json");  
 httppost.addHeader("X-Parse-Application-Id", "key1");  
 httppost.addHeader("X-Parse-REST-API-Key", "key2");  

希望对你有帮助

【讨论】:

    【解决方案2】:

    标头不是 JSON 正文的一部分。标头是请求的单独部分。只有正文内容应该是您发送的 json 的一部分。

    【讨论】:

    • 我有一个小代码,它还允许我包含单独的标头和正文,你们知道它是如何工作的吗?
    【解决方案3】:

    我建议你使用 HTTPURLConnection 而不是其他不推荐使用的 api。

        String urlStr = "";
        HttpURLConnection conn;
        URL url1;
        String jsonBody = "{ [\n" +
                "    {\n" +
                "        \"ephrase\": \"When the going gets tough, the tough get going.\",\n" +
                "        \"nvote\": 154,\n" +
                "        \"pphrase\": \"\",\n" +
                "        \"yvote\": 364\n" +
                "    },\n" +
                "    {\n" +
                "        \"ephrase\": \"Beggars can't be choosers.\",\n" +
                "        \"nvote\": 1,\n" +
                "        \"pphrase\": \"\",\n" +
                "        \"yvote\": 8\n" +
                "    }\n" +
                "] }";
    
        try {
    
            JSONObject jObj = new JSONObject(jsonBody);
    
            url1 = new URL(urlStr);
            conn = (HttpURLConnection) url1.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("X-Parse-Application-Id", "key1");
            conn.setRequestProperty("X-Parse-REST-API-Key", "key2");
            conn.setDoOutput(true);
            conn.connect();
    
            OutputStream os = conn.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
            osw.write(jObj.toString());
            osw.close();
    
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    只要确保你在 AsyncTask 的 doInBackground() 中执行上述操作,否则线程就可以了。

    【讨论】:

    • 如果您不想认真解决问题,请删除此答案。
    • @Amir:我可能误解了你的问题。你能告诉我吗?
    • @Amir:对你有帮助吗?
    • 去看新年烟花:) 明天会告诉你。还是谢谢
    【解决方案4】:

    我发现这个样本包含所有类型的 HTTP:

    https://github.com/loopj/android-async-http

    如果您使用它,您需要将以下代码添加到 JsonStreamerSample.java 以允许您包含标头。

    public boolean isRequestHeadersAllowed() {
        return true;
    }
    

    我还有一个小问题,下面的问题会进一步解释。

    Passing JSON object to parse.com in Android

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 2021-06-27
      • 2020-10-04
      • 2020-09-04
      • 2016-06-01
      • 2018-09-04
      • 1970-01-01
      • 2022-01-25
      • 2022-01-22
      相关资源
      最近更新 更多