代码之家  ›  专栏  ›  技术社区  ›  Nidhoegger

通过httpurlconnection发布json数据

  •  1
  • Nidhoegger  · 技术社区  · 6 年前

    我正在尝试使用Android向我的RESTful API发出请求, HttpURLConnection . 数据必须通过POST数据以JSON格式发送。

    这是我的代码:

    JSONObject check_request = new JSONObject();
    check_request.put("username", username);
    
    JSONObject request = BuildRequest(check_request, "username_check", false);
    Log.i("DEBUG", request.toString());
    // DEBUG OUTPUT: {"timestamp":1526900318,"request":{"username":"blubberfucken","type":"username_check"}}
    
    URL request_url = new URL(apiURL);
    HttpURLConnection connection = (HttpURLConnection)request_url.openConnection();
    connection.setRequestProperty("User-Agent", "TheGameApp");
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-type", "application/json; charset=UTF-8");
    connection.setDoOutput(true);
    connection.setDoInput(true);
    
    OutputStream os = connection.getOutputStream();
    os.write(request.toString().getBytes("UTF-8"));
    os.flush();
    
    
    InputStream in = new BufferedInputStream(connection.getInputStream());
    
    String result = "";
    
    BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF8"));
    String str;
    while ((str = br.readLine()) != null)
    {
        result += str;
    }
    
    Log.i("DEBUG", result);
    
    //JSONObject result_json = new JSONObject(result);
    os.close();
    in.close();
    connection.disconnect();
    

    您可以将调试输出视为注释。问题是API没有收到任何发布数据。我用过PHP var_dump 倾倒 $_POST $_REQUEST 它们都是空数组。

    我这里缺什么?

    当问题出现时,如果API工作。此curl命令的工作结果正确(它与调试器打印的JSON数据相同):

    curl -d '{"timestamp":1526900318,"request":{"username":"blubberfucken","type":"username_check"}}' -H "Content-Type: application/json" -X POST http://localhost/v1/api.php
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Nidhoegger    6 年前

    为了完整起见:上面的例子是有效的。这个问题的解决方案是在服务器端的php中使用pa部分,在这里我检查了内容类型并使用strpos搜索 application/json 在里面 $_SERVER['CONTENT-TYPE'] 然后换了 needle haystack (因此寻找 application/json; charset=UTF8 在字符串中 应用程序/JSON 而不是相反的方向)。