【问题标题】:How to send POST request using HTTPURLConnection with JSON data如何使用带有 JSON 数据的 HTTPURLConnection 发送 POST 请求
【发布时间】:2014-12-06 02:31:26
【问题描述】:

我有一个 RESTful API,我可以通过执行以下操作来调用它:

curl -H "Content-Type: application/json" -d '{"url":"http://www.example.com"}' http://www.example.com/post

在 Java 中,当我从 cURL 打印出接收到的请求数据时,我正确地得到了以下数据:

Log: Data grabbed for POST data: {"url":"http://www.example.com/url"}

但是,当我使用 HttpClient/HttpPost 通过 Java 发送 POST 请求时,我得到的数据格式很差,无法从 JSON 中获取键值对。

Log: Data grabbed for POST data: url=http%3A%2F%2Fwww.example.com%2Furl

在 Java 中,我正在这样做:

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://www.example.com/post/");

        List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();

        BasicNameValuePair nvp1 = new BasicNameValuePair("url", "http://www.example.com/url);

        nameValuePairs.add(nvp1);

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse httpresponse = httpclient.execute(httppost);

如何使来自 Java 的请求在数据发送方式方面类似于 cURL?

【问题讨论】:

  • 考虑使用 Jersey: jersey.java.net
  • 我对 HttpClient/HttpPost 知之甚少,但它们是否将数据作为 JSON 字符串发送?你也不必在标题中设置内容类型吗?

标签: java json rest http curl


【解决方案1】:

您呈现为来自 Java 客户端的数据是 URL 编码的。您似乎特别要求使用UrlEncodedFormEntity。不需要对 POST 请求的主体进行 URL 编码,因此如果您不希望这样,请使用更合适的 HttpEntity 实现。

事实上,如果您想将通用名称/值对转换为 JSON 格式的请求正文,就像您所做的那样,那么您可能需要使用 JSON 特定的 HttpEntity 实现或使用更简单的允许您直接格式化正文的实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多