java httpclient工具类_Java开发小技巧(五):HttpClient工具类

c81bc5e147164ced5315bd7461e4e4ae.png

前言

大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具有访问HTTP协议基本功能的高效工具类,为后续开发使用提供方便。

文章要点:

HttpClient使用流程

工具类封装

使用实例

HttpClient使用流程

1、导入Maven依赖

org.apache.httpcomponents

httpclient

4.5.5

commons-codec

commons-codec

1.11

com.google.code.gson

gson

2.8.5

2、创建HttpClient实例

HttpClient client = HttpClientBuilder.create().build();

3、创建请求方法的实例

GET请求使用HttpGet,POST请求使用HttpPost,并传入请求的URL

// POST请求

HttpPost post = new HttpPost(url);

// GET请求,URL中带请求参数

HttpGet get = new HttpGet(url);

4、添加请求参数

普通形式

List list = new ArrayList<>();

list.add(new BasicNameValuePair("username", "admin"));

list.add(new BasicNameValuePair("password", "123456"));

// GET请求方式

// 由于GET请求的参数是拼装在URL后方,所以需要构建一个完整的URL,再创建HttpGet实例

URIBuilder uriBuilder = new URIBuilder("http://www.baidu.com");

uriBuilder.setParameters(list);

HttpGet get = new HttpGet(uriBuilder.build());

// POST请求方式

post.setEntity(new UrlEncodedFormEntity(list, Charsets.UTF_8));

JSON形式

Map map = new HashMap<>();

map.put("username", "admin");

map.put("password", "123456");

Gson gson = new Gson();

String json = gson.toJson(map, new TypeToken>() {}.getType());

post.setEntity(new StringEntity(json, Charsets.UTF_8));

post.addHeader("Content-Type", "application/json");

5、发送请求

调用HttpClient实例的execute方法发送请求,返回一个HttpResponse对象

HttpResponse response = client.execute(post);

6、获取结果

String result = EntityUtils.toString(response.getEntity());

7、释放连接

post.releaseConnection();

工具类封装

HttpClient工具类代码(根据相应使用场景进行封装):

public class HttpClientUtil {

// 发送GET请求

public static String getRequest(String path, List parametersBody) throws RestApiException, URISyntaxException {

URIBuilder uriBuilder = new URIBuilder(path);

uriBuilder.setParameters(parametersBody);

HttpGet get = new HttpGet(uriBuilder.build());

HttpClient client = HttpClientBuilder.create().build();

try {

HttpResponse response = client.execute(get);

int code = response.getStatusLine().getStatusCode();

if (code >= 400)

throw new RuntimeException((new StringBuilder()).append("Could not access protected resource. Server returned http code: ").append(code).toString());

return EntityUtils.toString(response.getEntity());

}

catch (ClientProtocolException e) {

throw new RestApiException("postRequest -- Client protocol exception!", e);

}

catch (IOException e) {

throw new RestApiException("postRequest -- IO error!", e);

}

finally {

get.releaseConnection();

}

}

// 发送POST请求(普通表单形式)

public static String postForm(String path, List parametersBody) throws RestApiException {

HttpEntity entity = new UrlEncodedFormEntity(parametersBody, Charsets.UTF_8);

return postRequest(path, "application/x-www-form-urlencoded", entity);

}

// 发送POST请求(JSON形式)

public static String postJSON(String path, String json) throws RestApiException {

StringEntity entity = new StringEntity(json, Charsets.UTF_8);

return postRequest(path, "application/json", entity);

}

// 发送POST请求

public static String postRequest(String path, String mediaType, HttpEntity entity) throws RestApiException {

logger.debug("[postRequest] resourceUrl: {}", path);

HttpPost post = new HttpPost(path);

post.addHeader("Content-Type", mediaType);

post.addHeader("Accept", "application/json");

post.setEntity(entity);

try {

HttpClient client = HttpClientBuilder.create().build();

HttpResponse response = client.execute(post);

int code = response.getStatusLine().getStatusCode();

if (code >= 400)

throw new RestApiException(EntityUtils.toString(response.getEntity()));

return EntityUtils.toString(response.getEntity());

}

catch (ClientProtocolException e) {

throw new RestApiException("postRequest -- Client protocol exception!", e);

}

catch (IOException e) {

throw new RestApiException("postRequest -- IO error!", e);

}

finally {

post.releaseConnection();

}

}

}

使用实例

GET请求

List parametersBody = new ArrayList();

parametersBody.add(new BasicNameValuePair("userId", "admin"));

String result = HttpClientUtil.getRequest("http://www.test.com/user",parametersBody);

POST请求

List parametersBody = new ArrayList();

parametersBody.add(new BasicNameValuePair("username", "admin"));

parametersBody.add(new BasicNameValuePair("password", "123456"));

String result = HttpClientUtil.postForm("http://www.test.com/login",parametersBody);

POST请求(JSON形式)

Map map = new HashMap<>();

map.put("username", "admin");

map.put("password", "123456");

Gson gson = new Gson();

String json = gson.toJson(map, new TypeToken>() {}.getType());

String result = HttpClientUtil.postJSON("http://www.test.com/login", json);

关于HttpClient的详细介绍看这里:HttpClient入门

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值