在实际项目开发过程中,与第三方对接数据是比较常见的操作,利用java代码处理get和post请求其实就是核心。
使用HttpClient客户端,可以用更简便、更灵活的方式来发送HTTP请求和接收HTTP响应。这个新的客户端旨在替代旧的 HttpURLConnection
类,并提供对HTTP/2协议和WebSocket的支持,不过需要你的项目支持Java 11版本,当然你也可以使用第三方库。
一.HttpClient主要特性:
- HTTP/2支持:默认支持HTTP/2协议,同时向后兼容HTTP/1.1。
- 同步和异步API:提供了同步和异步两种模式的API,使得处理HTTP请求和响应更加灵活。
- 易于使用:API设计简洁,使用方便,更容易创建HTTP请求和处理响应。
- WebSocket支持:提供了对WebSocket的支持,使得创建和管理WebSocket连接变得简单。
以下实例基于Java8版本来实现:
二.项目引入第三方库HttpComponents
首先,我们需要在项目中引入HttpComponents库,HtpComponents是Apache的一个开源项目,提供了多个模块,包括HttpClien和HttpCore,HttpClient模块用于 发送HTTP请求和接收HTTP响应,而HttpCore模块则提供了HTTP协议的核心功能。
Apache官方网站:https://hc.apache.org/downloads.cgi
<!-- java发送请求 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.8</version>
</dependency>
三.使用HttpClient发送post请求
利用HttpClient发送post请求,传参方式是json,已经改造为自定义map传值。
- 发送post请求
/**
* 发送post-http请求
*/
public static String sendPostHttpRequest(String url, Map<String, String> bodyMap) throws Exception {
url ="http://10.10.0.12:8061/getLocateImmData.action";
System.out.println("sendHttpRequest请求地址:" + url);
System.out.println("sendHttpRequest发送参数:" + bodyMap.toString());
HttpClient client = HttpClientBuilder.create().build();
HttpPost postRequest = new HttpPost(url);
List<NameValuePair> nvps = new ArrayList<>();
for (String key : bodyMap.keySet()) {
nvps.add(new BasicNameValuePair(key, bodyMap.get(key)));
}
postRequest.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
int retry = 3;
HttpResponse execute = null;
while (retry-- > 0) {
try {
execute = client.execute(postRequest);
break;
} catch (Exception e) {
Thread.sleep(5000);
e.printStackTrace();
}
}
if (execute == null) {
throw new Exception("接口请求失败");
}
String resp = EntityUtils.toString(execute.getEntity(), "UTF-8");
System.out.println("sendPostHttpRequest接口请求路径为:"+url+",————————请求返回数据:" + resp);
return resp;
}
- 解析响应数据
/**
* 解析响应数据
* @param response
* @return
*/
public static String getResponseResultByResponseData(String response) {
String responseStr = null;
JSONObject jsonObject = JSON.parseObject(response);
String status = jsonObject.getString("code");
if (!"200".equals(status)) {
System.out.println("status:"+status+"——》"+response);
} else {
System.out.println("正常状态按实际业务处理");
}
return responseStr;
}
- 实际应用实例
Map<String, String> bodyMap = new HashMap<>();
bodyMap.put("appkey",appkey);
bodyMap.put("cardNums",logoInfo.getHelmetSn()+","+blindInfo.getHelmetSn());
String responseStr = null;
try {
responseStr = RequestExternalDataTools.sendPostHttpRequest(null, bodyMap);
} catch (Exception e) {
throw new RuntimeException(e);
}
String resultStr = RequestExternalDataTools.getResponseResultByResponseData(responseStr);
- 最终控制台结果展示: