有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java HTTP:差异请求属性和POST参数

我目前正试图通过一个使用HttpURLConnection类的安卓应用程序向一个简单的PHP Web服务发送一个POST方法。多个教程使用缓冲编写器类将参数写入http正文,但HttpURLConnection也有一个setRequestProperty()方法,该方法向连接添加一个键值对。显然,它们并不是用于相同的目的,但有什么区别(我也检查了谷歌,但没有找到答案)


共 (2) 个答案

  1. # 1 楼答案

    您向服务器发出请求的方式太旧了。 试着使用一些库来减少很多不必要的代码,比如加载到缓冲区读取器和转换过程,我建议你使用volley库,请阅读有关它的谷歌文档。 您可以创建一个自定义JSONObjectReuqest并重写getParams方法,也可以在构造函数中将它们作为JSONObject提供给请求体

    就像这样(我编辑了你的代码):

    JSONObject obj = new JSONObject();
    obj.put("key", "value");
    obj.put("key2", "value2");
    // add whatever you want
    
    RequestQueue queue = MyVolley.getRequestQueue();
    JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,SPHERE_URL,obj,
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                 System.out.println(response);
                 hideProgressDialog();
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                 hideProgressDialog();
            }
        });
    queue.add(jsObjRequest);
  2. # 2 楼答案

    setRequestProperty()用于设置HTTP头(如Content-Type):

    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    

    但要设置POST参数,需要对它们进行url编码,并将结果字符串(转换为字节流)写入从HttpURLConnection实例获得的OutputStream

    例如,要发送值为1a和值为2b作为POST参数,可以执行以下操作:

    final String urlEncodedString = "a=1&b=2";
    final byte[] bytesToWrite = urlEncodedString.getBytes(StandardCharsets.UTF_8);
    conn.getOutputStream().write(bytesToWrite);
    

    这里,connHttpURLConnection的一个实例