如何使用带有JSON数据的HTTPURLConnection发送POST请求

时间:2014-10-10 20:28:36

标签: java json rest http curl

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

卷曲-H"内容类型: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类似?

1 个答案:

答案 0 :(得分:2)

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

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