一、概述
在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 请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
public static String post(String url,JSONObject jsonObject) { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); StringEntity myEntity = new StringEntity(jsonObject.toJSONString(), ContentType.APPLICATION_JSON); httpPost.setEntity(myEntity); try { HttpResponse httpResponse = httpClient.execute(httpPost); if (httpResponse.getStatusLine().getStatusCode() == 200) { String resutlEntity = EntityUtils.toString(httpResponse.getEntity()); return resutlEntity; } else { return null; } } catch (IOException e) { e.printStackTrace(); }finally { try { if (httpClient != null) { httpClient.close(); } } catch (IOException e) { e.printStackTrace(); } } return null; }
|
2.2,GET 请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
public static String get(String url) { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(url); RequestConfig config = RequestConfig.custom() .setConnectTimeout(5000) .setSocketTimeout(5000) .setConnectionRequestTimeout(5000) .setRedirectsEnabled(true) .build(); httpGet.setConfig(config); try { HttpResponse response = httpClient.execute(httpGet); if (response.getStatusLine().getStatusCode() == 200) { String resutlEntity = EntityUtils.toString(response.getEntity()); return resutlEntity; } else { return null; } } catch (IOException e) { e.printStackTrace(); }finally { try { if (httpClient != null) { httpClient.close(); } } catch (IOException e) { e.printStackTrace(); } } return null; }
|