从Java程序发出HTTP请求的最佳方法是什么?

时间:2018-08-20 17:05:43

标签: java sql json http

我正在尝试使用一个小型Java程序发出HTTPs请求(发送SQL命令的纯文本),并尝试接收JSON数据。该功能已经内置在Java中吗?还是需要外部软件包/库?

2 个答案:

答案 0 :(得分:2)

https://square.github.io/okhttp/是用于HTTP交互的很好的库。然后,您可以根据需要使用Jackson / Gson解析对键入对象的响应

用法

public static final MediaType JSON
    = MediaType.parse("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {
  RequestBody body = RequestBody.create(JSON, json);
  Request request = new Request.Builder()
      .url(url)
      .post(body)
      .build();
  Response response = client.newCall(request).execute();
  return response.body().string();
}

行家:

<dependency>
  <groupId>com.squareup.retrofit2</groupId>
  <artifactId>retrofit</artifactId>
  <version>2.4.0</version>
</dependency>

或Gradle:

  

实现'com.squareup.retrofit2:retrofit:2.4.0'

如果您想用Patton坦克杀死一只蚂蚁,您还有其他各种选择,例如spring,netflix OSS-假装客户端+功能区等

话虽这么说,首先,我会尝试将Kayaman发表的内容https://www.baeldung.com/java-9-http-client减少对它的依赖程度。

答案 1 :(得分:1)

您可以执行多项操作。通常,当我需要使用HTTP请求时,我会使用Jsoup parser,因为它可以通过简单的单行代码发送HTTP请求:

Jsoup.connect("google.com").data("key", "value").post();

您可以使用ignoreContentType(true)通过Jsoup获得JSON响应:

Jsoup.connect("https://postman-echo.com/post").data("derp1", "derp2").data("sql1", "sql2").ignoreContentType(true).post().body().html()

这将导致以下输出:

{
   "args":{

   },
   "data":"",
   "files":{

   },
   "form":{
      "derp1":"derp2",
      "sql1":"sql2"
   },
   "headers":{
      "host":"postman-echo.com",
      "content-length":"21",
      "accept":"text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2",
      "accept-encoding":"gzip",
      "content-type":"application/x-www-form-urlencoded; charset=UTF-8",
      "user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
      "x-forwarded-port":"443",
      "x-forwarded-proto":"https"
   },
   "json":{
      "derp1":"derp2",
      "sql1":"sql2"
   },
   "url":"https://postman-echo.com/post"
}

从那里,只需使用您想要的任何JSON API将字符串解析为JSON(我个人使用org.jsonGson)。您可以在here的文档中进一步了解Jsoup API。

如果您不想使用API​​,this可能会比我更好地为您提供帮助,因为它显示了如何同时使用HTTPSUrlConnection和Apache的HTTPClient发送POST请求。 / p>