本文共 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/