[英]HTTP: difference Request Property and POST - Parameters
我目前正在尝试使用HttpURLConnection-class通过android应用程序将POST方法发送到简单的PHP Web服务。 多个教程使用缓冲的writer类将参数写入http-body,但是HttpURLConnection也具有setRequestProperty()方法,该方法将键值对添加到连接中。 显然,它们不是用于同一目的,但是有什么区别(我也检查过Google,但没有找到答案)?
setRequestProperty()
用于设置HTTP标头(如Content-Type
):
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
但是要设置POST参数,您需要对其进行url编码并将结果字符串(转换为字节流)写入从HttpURLConnection
实例获得的OutputStream
。
例如,发送a
带有值1
和b
值为2
的POST参数,你可以做到以下几点:
final String urlEncodedString = "a=1&b=2";
final byte[] bytesToWrite = urlEncodedString.getBytes(StandardCharsets.UTF_8);
conn.getOutputStream().write(bytesToWrite);
在这里, conn
是HttpURLConnection
的实例。
您使用的过旧方式向服务器发出请求。 尝试使用一些库,这些库将减少许多不必要的代码,例如加载到缓冲区读取器和转换过程,而不是我建议您使用凌空库,请阅读有关它的Google文档。 您可以创建一个自定义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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.