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

5
我正在尝试使用一个小的Java程序来进行HTTPs请求(发送SQL命令的纯文本),并尝试接收JSON数据。Java是否已经内置了这种能力,还是我需要外部的包/库?

发送纯SQL命令不是一个好主意。这样,任何人都可以随意修改或删除您的数据库。 - ByteHamster
我已经使用令牌建立了连接,所以目前只有我能够修改它。但是我就是无法想出如何使用HTTP POST请求。 - beefoak
这个回答解决了你的问题吗?如何在Java中发送HTTP请求? - Mahozad
2个回答

4

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();
}

Maven:

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

或者Gradle:

implementation 'com.squareup.retrofit2:retrofit:2.4.0'

如果你只是想杀一只蚂蚁,那么还有其他选择可供选择,比如spring、Netflix OSS-feign client + ribbon等。

话虽如此,我建议先试试Kayaman发表的方法,https://www.baeldung.com/java-9-http-client,因为它可以少依赖一个库。


1

有多种方法可以做到这一点。当我通常需要使用HTTP请求时,我使用 Jsoup解析器,因为它可以在一个简单的一行代码中发送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)。您可以在此处找到Jsoup API的文档,了解更多信息here
如果您不想使用API,this可能比我更能帮助您,因为它展示了如何使用HTTPSUrlConnection和Apache的HTTPClient发送POST请求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接