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

时间:2017-08-21 18:52:15

标签: java android http httpurlconnection

我目前正在尝试使用HttpURLConnection类通过Android应用程序将POST方法发送到简单的PHP Web服务。多个教程使用缓冲的writer类将params写入http-body,但HttpURLConnection也有一个setRequestProperty()方法,它为连接添加一个键值对。显然它们不是用于同一目的,但有什么区别(我也检查了谷歌,但没有找到答案)?

2 个答案:

答案 0 :(得分:3)

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

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

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

例如,要将值a的{​​{1}}和值1的{​​{1}}作为POST参数发送,您可以执行以下操作:

b

此处,2final String urlEncodedString = "a=1&b=2"; final byte[] bytesToWrite = urlEncodedString.getBytes(StandardCharsets.UTF_8); conn.getOutputStream().write(bytesToWrite); 的实例。

答案 1 :(得分:1)

您使用过于旧的方式向服务器发出请求。 尝试使用一些库,这将减少许多不必要的代码,如加载缓冲读取器和转换过程,而我建议你使用齐射库,请阅读有关它的谷歌文档。 您可以创建自定义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);
&#13;
&#13;
&#13;