【问题标题】:HTTP: difference Request Property and POST - ParametersHTTP:不同的请求属性和 POST - 参数
【发布时间】:2017-08-21 18:52:14
【问题描述】:

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

【问题讨论】:

    标签: java android http httpurlconnection


    【解决方案1】:

    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 的一个实例。

    【讨论】:

    • 谢谢你,这就是我想知道的:)
    【解决方案2】:

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

    【讨论】:

    • 我已经阅读了 volley-library,但为了学习,我想以老式的方式来做。谢谢你的建议:)
    猜你喜欢
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2021-08-08
    • 1970-01-01
    • 2016-12-09
    • 2013-08-23
    相关资源
    最近更新 更多