我正在尝试使用一个小的Java程序来进行HTTPs请求(发送SQL命令的纯文本),并尝试接收JSON数据。Java是否已经内置了这种能力,还是我需要外部的包/库?
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,因为它可以少依赖一个库。
有多种方法可以做到这一点。当我通常需要使用HTTP请求时,我使用 Jsoup解析器,因为它可以在一个简单的一行代码中发送HTTP请求:
Jsoup.connect("google.com").data("key", "value").post();
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"
}