*在Java11的java.net.http.包中,有一个HttpClient类可以完成HTTP请求。
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
public class Java11HttpClientExample {
private final HttpClient httpClient = HttpClient.newBuilder()
// 强制使用HTTP/2(若服务端不支持则抛出异常)
.version(HttpClient.Version.HTTP_2)
// 设置TCP连接超时为15秒
.connectTimeout(Duration.ofSeconds(15))
// 自动跟随所有重定向
.followRedirects(HttpClient.Redirect.ALWAYS)
.build();
public static void main(String[] args) throws Exception {
String url ="http://127.0.0.1:8080/algo/affected/calc";
Map<String, Object> data = new HashMap<>();
data.put("typeEnum", "KILOMETER_GRID");
data.put("eventId", "1841");
// 发送POST请求
MyTest myTest = new MyTest();
myTest.sendPost(url, data);
}
private void sendGet() throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(URI.create("你请求数据的url地址"))
.setHeader("User-Agent", "Java 11 HttpClient Bot")
.build();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
private void sendPost(String url, Map<String, Object> data) throws Exception {
String jsonStr = JSONUtil.toJsonStr(data);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.header(HttpHeaders.AUTHORIZATION, "Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImY3YjI5ZTM5LTFjMWEtNGM0My1iNzNiLWM4MmIwNGM5NGVmOSJ9.lMs_1RYAtnHxnQyZ9DktVwL3dkcoZrz6ot8C5RidUvojeXxTBt20tVfc7F17ng6maFVMpiwW0lZ0b-5Zovj_WA")
.POST(HttpRequest.BodyPublishers.ofString(jsonStr))
.build();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("statusCode: " + response.statusCode());
System.out.println("body: " + response.body());
}
}