我正在尝试使用一个小型Java程序发出HTTPs请求(发送SQL命令的纯文本),并尝试接收JSON数据。该功能已经内置在Java中吗?还是需要外部软件包/库?
答案 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.json和Gson)。您可以在here的文档中进一步了解Jsoup API。
如果您不想使用API,this可能会比我更好地为您提供帮助,因为它显示了如何同时使用HTTPSUrlConnection和Apache的HTTPClient发送POST请求。 / p>