httpclientutil java_基于 Httpclient 的封装 HttpClientUtil

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.net.SocketTimeoutException;

import java.nio.charset.Charset;

import java.util.Base64;

import java.util.List;

import java.util.Map;

import java.util.Set;

import org.apache.http.HttpEntity;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpUriRequest;

import org.apache.http.client.methods.RequestBuilder;

import org.apache.http.cookie.Cookie;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.BasicCookieStore;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.impl.client.LaxRedirectStrategy;

import org.apache.http.util.EntityUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

*

* @author hp

* 通过httpclient 请求地址页面

*

*/

public class HttpClientUtil{

private static final String osName = System.getProperty("os.name").toLowerCase();

private static final String DEFAULT_WINDOWS_REQUESTER_HEADER_USER_AGENT = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";

private static final String DEFAULT_LINUX_REQUESTER_HEADER_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17";

private static final Logger logger=LoggerFactory.getLogger(HttpClientUtil.class);

private static final RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();// 设置请求和传输超时时间

private RequestBuilder requestBuilder=null;

private Charset charset=Charset.forName("utf-8");

private String authorization=null;

private String contentType=null;

public HttpClientUtil() {

}

public static HttpClientUtil getInstance() {

return new HttpClientUtil();

}

public HttpClientRequest get(String url) {

requestBuilder = RequestBuilder.get().setUri(url).setConfig(requestConfig);

return new HttpClientRequest();

}

public HttpClientRequest delete(String url) {

requestBuilder = RequestBuilder.delete().setUri(url).setConfig(requestConfig);

return new HttpClientRequest();

}

public HttpClientRequest put(String url) {

requestBuilder = RequestBuilder.put().setUri(url).setConfig(requestConfig);

return new HttpClientRequest();

}

public HttpClientUtil setAuthorization(String userName, String password) {

this.authorization="Basic "+Base64.getEncoder().encodeToString(new String(userName+":"+password).getBytes(charset));

return this;

}

public HttpClientUtil setContentType(String contentType) {

this.contentType=contentType;

return this;

}

public HttpClientUtil setCharset(Charset charset) {

this.charset=charset;

return this;

}

public class HttpClientRequest {

private Integer retry = 5;

private String reponseContent;

private BasicCookieStore cookieStore = new BasicCookieStore();

public HttpClientRequest() {

request();

}

private void request() {

String url = requestBuilder.getUri().toString();

logger.info("请求地址url-->" + url);

CloseableHttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore)

.setRedirectStrategy(new LaxRedirectStrategy()).build();

try {

requestBuilder.setCharset(charset);

HttpUriRequest request = requestBuilder.build();

if (osName.indexOf("window") >= 0) {

request.setHeader("User-Agent", DEFAULT_WINDOWS_REQUESTER_HEADER_USER_AGENT);

} else {

request.setHeader("User-Agent", DEFAULT_LINUX_REQUESTER_HEADER_USER_AGENT);

}

if (authorization != null) {

request.setHeader("Authorization", authorization);

}

if (contentType != null) {

request.setHeader("Content-type", contentType);

}

CloseableHttpResponse httpResponse = httpClient.execute(request);

reponseContent = EntityUtils.toString(httpResponse.getEntity(), charset);

} catch (ClientProtocolException e) {

e.printStackTrace();

logger.info("请求地址[ " + url + " ]异常");

} catch (SocketTimeoutException e) { // 如果出现超时的异常就重试

if (--retry > 0) {

logger.error("请求地址[ " + url + " ]异常--进行重试次:" + retry, e);

try {

Thread.sleep(3000);

} catch (InterruptedException e1) {

e1.printStackTrace();

}

request();

}

} catch (IOException e) {

logger.error("请求地址[ " + url + " ]异常", e);

} finally {

if (httpClient != null) {

try {

httpClient.close();

} catch (IOException e) {

logger.error("httpClient.close() 异常", e);

}

}

}

}

public String getReponseContent() {

return reponseContent;

}

public List getCookies() {

return cookieStore.getCookies();

}

}

public HttpClientRequest post(String url,String requestBody) {

return post(url, null, new StringEntity(requestBody,charset));

}

public HttpClientRequest post(String url,Map formData) {

return post(url, formData, null);

}

private HttpClientRequest post(String url, Map formData,HttpEntity httpEntity) {

requestBuilder = RequestBuilder.post().setUri(url).setConfig(requestConfig);

if (formData != null && !formData.isEmpty()) {

Set ks = formData.keySet();

for (String k : ks) {

requestBuilder.addParameter(k, formData.get(k));

}

}

if(httpEntity!=null) {

requestBuilder.setEntity(httpEntity);

}

return new HttpClientRequest();

}

}

使用样例:

@Test

public void get() {

System.err.println(HttpClientUtil.getInstance()

.setAuthorization("admin", "admin")

.setContentType("application/json")

.get("http://192.168.177.107:7180/api/v19/users/admin").getReponseContent());;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值