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

标签 java json rest http curl

我有一个 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?

最佳答案

您显示的来自 Java 客户端的数据是经过 URL 编码的。您似乎通过使用 UrlEncodedFormEntity 明确要求。对 POST 请求的主体进行 URL 编码并不是必需的,因此如果您不希望这样,请使用更合适的 HttpEntity 实现。

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

关于java - 如何使用带有 JSON 数据的 HTTPURLConnection 发送 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26307584/

相关文章:

java - 如何在 java 中将复杂的 JSON 对象发送到 cURL 请求

python - 尝试使用字典中的键时出现 "list indices must be integers"错误

php - 在 REST API 中使用 POST 参数或 JSON 哪个更好?

java - 使用 RestTemplate 时出现异常,消息为 "http protocol is not supported"

javascript - 如何显示 JSON 数据中的图像 URL?

java - 在 Apache Camel 中从 Json 检索对象

java - Netbeans 构建过程似乎每次都会重建所有 Jars

java - 检查 url 当前是否已加载到 android/java 中

java - 在 Java 中继承流利的 setter

python - 在这种情况下提取数据最有效的方法是什么?