繁体   English   中英

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

[英]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带有值1b值为2的POST参数,你可以做到以下几点:

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

在这里, connHttpURLConnection的实例。

您使用的过旧方式向服务器发出请求。 尝试使用一些库,这些库将减少许多不必要的代码,例如加载到缓冲区读取器和转换过程,而不是我建议您使用凌空库,请阅读有关它的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM