博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 Apache 工具类 HttpClients 进行 GET、POST请求
阅读量:3714 次
发布时间:2019-05-21

本文共 2542 字,大约阅读时间需要 8 分钟。

                                                   使用 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;}

 

转载地址:http://iyajn.baihongyu.com/

你可能感兴趣的文章
NodeMcu---DHT11
查看>>
NodeMcu---DS18B20
查看>>
如何查看Ubuntu是32位还是64位
查看>>
Ubuntu16.04系统Tab键不能自动补全问题解决
查看>>
IAR CC2530串口重定向与51对比
查看>>
E: Could not get lock /var/cache/apt/archives/lock - open (11: Resource temporarily unavailable)
查看>>
ULN2003步进电机驱动(STM32或51)
查看>>
28BYJ4+ULN2003驱动板
查看>>
Androidstudio 的虚拟机启动,报错SSL handshake aborted: ssl=0xb7ad54b8: I/O error during system call
查看>>
SSRF总结
查看>>
2.3全卷积网络(FCN)与图像分割
查看>>
2.4时序卷积网络TCN:因果膨胀卷积、残差连接和跳过连接
查看>>
8.17 记忆增强图神经网络
查看>>
8.9 元学习网络结构讲解
查看>>
8.8LSTM作为元学习器学习梯度下降
查看>>
7.5图卷积编码器-解码器
查看>>
二分法06:第一个错误的版本
查看>>
二分法08:寻找旋转排序数组中的最小值
查看>>
二分法07:寻找峰值
查看>>
二分法01:查找一个数
查看>>