使用 Apache 工具类 HttpClients 进行 GET、POST请求

9 篇文章 0 订阅

                                                   使用 Apache 工具类 HttpClients 进行 GET、POST请求

一、概述

       在Java中进行 HTTP 请求是一种常见的编程需求,尤其是在调用第三方API的时候。因此,了解 HTTP 协议的原理、熟悉Apache工具类对此协议的实现至关重要。(更好的阅读体验,请移步我的个人博客)

        HTTP 协议属于应用层协议,同属于应用层协议的还有DNS、FTP等协议。HTTP 是基于TCP的可靠传输协议,采用的是客户端/服务器的(C/S)的工作方式,在 HTTP 的通信过程中,首先由客户端向服务器发起建立链接的请求,通过 TCP三次握手来完成,然后客户端向服务器发出请求,告诉服务器想得到的信息。服务器通过响应返回客户端需要的信息。最后通过 TCP 四次握手关闭链接,从而完成一次基本的通信过程。   

        由于客户端与服务器有不同的数据交换需求,为了更高效的进行数据交换,HTTP 协议定义了多种不同的请求方法,服务器可以针对不同的请求方式进行优化,从而提高客户端的响应速度和服务器的性能。常见的请求方式有GET, POST, PUT, DELETE等。当需要查询和获取服务器资源时,一般使用GET请求;当需要向服务器提交大量表单数据时,POST则更为常用。

        HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。熟悉HttpClient 工具类对我们的项目开发非常的有帮助。

二、程序代码示例

  2.1 POST 请求

/*
 *  POST请求
 *  参数是:URL,jsonObject(请求参数封装成json对象)
 * 
 * */
public static String post(String url,JSONObject jsonObject) {
	//创建HttpClients对象
	CloseableHttpClient httpClient = HttpClients.createDefault();
	//创建post请求对象
	HttpPost httpPost = new HttpPost(url);
	//创建封装请求参数对象,设置post请求参数
	StringEntity myEntity = new StringEntity(jsonObject.toJSONString(), ContentType.APPLICATION_JSON);
	httpPost.setEntity(myEntity);
	try {
		//执行POST请求,获取请求结果
		HttpResponse httpResponse = httpClient.execute(httpPost);
		if (httpResponse.getStatusLine().getStatusCode() == 200) {
			// 发送成功
			String resutlEntity = EntityUtils.toString(httpResponse.getEntity());
			return resutlEntity;
		} else {
			// 发送失败
			return null;
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		try {
			if (httpClient != null) {
				// 释放资源
				httpClient.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	return null;
}

  2.1 GET 请求

/*
 * GET请求,如果有请求参数,则拼接到到url后面
 * */
public static String get(String url) {
	//创建HttpClients对象
	CloseableHttpClient httpClient = HttpClients.createDefault();
	//创建get请求对象
	HttpGet httpGet = new HttpGet(url);
	//设置请求配置参数
	RequestConfig config = RequestConfig.custom()
			.setConnectTimeout(5000)
			.setSocketTimeout(5000)
			.setConnectionRequestTimeout(5000)
			.setRedirectsEnabled(true)
			.build();
	httpGet.setConfig(config);
	try {
		//执行get请求
		HttpResponse response = httpClient.execute(httpGet);
		//获取返回结果
		if (response.getStatusLine().getStatusCode() == 200) {
			// 发送成功
			String resutlEntity = EntityUtils.toString(response.getEntity());
			return resutlEntity;
		} else {
			// 发送失败
			return null;
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		try {
			if (httpClient != null) {
				// 释放资源
				httpClient.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	return null;
}

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值