import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class FluentHttpUtil {
/**
* 连接超时: 5秒
*/
public static final int CONNECT_TIMEOUT = 5 * 1000;
/**
* socket超时: 1分钟
*/
public static final int SOCKET_TIMEOUT = 60 * 1000;
/**
* 发送GET请求
*
* @param url
* @return
* @throws Exception
*/
public static String sendGetRequest(String url) throws Exception {
return Request.Get(url)
.useExpectContinue()
.connectTimeout(CONNECT_TIMEOUT) // 连接超时: 5秒
.socketTimeout(SOCKET_TIMEOUT) // socket超时: 1分钟
.execute()
.returnContent()
.asString();
}
/**
* 发送GET请求
*
* @param url
* @param paramMap
* @return
* @throws Exception
*/
public static String sendGetRequest(String url, Map<String, Object> paramMap) throws Exception {
/*
* 由于GET请求的参数都是拼装在URL地址后方,所以我们要构建一个URL,带参数
*/
URIBuilder uriBuilder = new URIBuilder(url);
// 1、创建httpClient
CloseableHttpClient client = HttpClients.createDefault();
// 2、封装请求参数
List<NameValuePair> list = new ArrayList<>();
paramMap.forEach((k, v) -> {
list.add(new BasicNameValuePair(k, v.toString()));
});
// 3、转化参数
// String params = EntityUtils.toString(new UrlEncodedFormEntity(list, Consts.UTF_8));
// System.out.println(params);
// 设置URL请求参数
uriBuilder.setParameters(list);
// 构建请求URL对象
URI uri = uriBuilder.build();
// 4、创建HttpGet请求
HttpGet httpGet = new HttpGet(uri);
CloseableHttpResponse response = client.execute(httpGet);
// 5、获取实体
HttpEntity entity = response.getEntity();
// 将实体装成字符串
String result = EntityUtils.toString(entity, Consts.UTF_8.name());
response.close();
return result;
}
/**
* 发送POST请求,参数为JSON格式
*
* @param url
* @param param
* @return
* @throws Exception
*/
public static String sendPostJson(String url, String param) throws Exception {
return Request.Post(url)
.useExpectContinue()
.connectTimeout(CONNECT_TIMEOUT) // 连接超时: 5秒
.socketTimeout(SOCKET_TIMEOUT) // socket超时: 1分钟
.bodyString(param, ContentType.APPLICATION_JSON)
.execute()
.returnContent()
.asString();
}
/**
* 发送POST请求,参数为JSON格式
*
* @param url
* @param param
* @param returnBodyOnError
* 响应状态码大于300时,是否返回body. true表示返回, false表示抛出异常
* @return
* @throws Exception
*/
public static String sendPostJson(String url, String param, boolean returnBodyOnError) throws Exception {
return Request.Post(url)
.useExpectContinue()
.connectTimeout(CONNECT_TIMEOUT) // 连接超时: 5秒
.socketTimeout(SOCKET_TIMEOUT) // socket超时: 1分钟
.bodyString(param, ContentType.APPLICATION_JSON)
.execute()
.handleResponse(new BasicResponseHandler() {
@Override
public String handleResponse(HttpResponse response) throws HttpResponseException, IOException {
final StatusLine statusLine = response.getStatusLine();
final HttpEntity entity = response.getEntity();
if (!returnBodyOnError && statusLine.getStatusCode() >= 300) {
EntityUtils.consume(entity);
throw new HttpResponseException(statusLine.getStatusCode(),
statusLine.getReasonPhrase());
}
return entity == null ? null : handleEntity(entity);
}
});
}
/**
* 发送PUT请求,参数为JSON格式
*
* @param url
* @param param
* @return
* @throws Exception
*/
public static String sendPutJson(String url, String param) throws Exception {
return Request.Put(url)
.useExpectContinue()
.connectTimeout(CONNECT_TIMEOUT) // 连接超时: 5秒
.socketTimeout(SOCKET_TIMEOUT) // socket超时: 1分钟
.bodyString(param, ContentType.APPLICATION_JSON)
.execute()
.returnContent()
.asString();
}
}
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>fluent-hc</artifactId>
</dependency>