HttpClient實現 get、post、put、delete請求【轉】

來自:HttpClient實現 get、post、put、delete請求_httpclient put請求-CSDN博客

目錄

HttpClient

HttpClient的主要功能

httpclient使用示例主要步驟

Spring Boot 工程結構

HttpClient實現主要代碼:

GET

POST

PUT

Delete?

HttpClient
HttpClient 是Apache Jakarta Common 下的子項目,可以用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,方便在日常項目開發中,調用第三方接口數據。


HttpClient的主要功能
實現了所有 HTTP 的方法(GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS 等)
支持 HTTPS 協議
支持代理服務器(Nginx等)等
支持自動(跳轉)轉向
環境說明:JDK1.8、SpringBoot(2.2.2)

在pom.xml中引入HttpClient的依賴和SpringBoot的基本依賴配置(web,jpa,fastjson,mysql)。

<dependency>
? ? <groupId>org.apache.httpcomponents</groupId>
? ? <artifactId>httpclient</artifactId>
? ? <version>4.5.3</version>
</dependency>
httpclient使用示例主要步驟

【步驟】:
1)創建一個httpclient對象,注意以下版本問題說明
HttpClient4.0版本前:
HttpClient httpClient = new DefaultHttpClient();
4.0版本后:
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
2)創建一個httpGet對象
HttpGet request = new HttpGet(uri);
3)執行請求調用httpclient的execute(),傳入httpGet對象,返回CloseableHttpResponse response = httpClient.execute(request, HttpClientContext.create());
4)取得響應結果并處理
5)關閉HttpClient

注意:主動設置編碼,防止響應出現亂碼

Spring Boot 工程結構


HttpClient實現主要代碼:
GET
? /**GET有參:
? ? ?*/
? ? @Autowired
? ? private UserServiceImple userServiceImple;
? ? @Test
? ? public void getByUsername(){
? ? ? ? List<User> users = userServiceImple.findByUserName("王三");
? ? ? ? System.out.println(JSON.toJSONString(users));
?
? ? }
? ? @Test
? ? public void doGetTestWayOne() {
? ? ? ? // 獲得Http客戶端(可以理解為:你得先有一個瀏覽器;注意:實際上HttpClient與瀏覽器是不一樣的)
? ? ? ? CloseableHttpClient httpClient = HttpClientBuilder.create().build();
?
? ? ? ? // 創建Get請求
? ? ? ? HttpGet httpGet = new HttpGet("http://localhost:8080/user/2");
? ? ? ? // 響應模型
? ? ? ? CloseableHttpResponse response = null;
? ? ? ? try {
? ? ? ? ? ? // 配置信息
? ? ? ? ? ? RequestConfig requestConfig = RequestConfig.custom()
? ? ? ? ? ? ? ? ? ? // 設置連接超時時間(單位毫秒)
? ? ? ? ? ? ? ? ? ? .setConnectTimeout(5000)
? ? ? ? ? ? ? ? ? ? // 設置請求超時時間(單位毫秒)
? ? ? ? ? ? ? ? ? ? .setConnectionRequestTimeout(5000)
? ? ? ? ? ? ? ? ? ? // socket讀寫超時時間(單位毫秒)
? ? ? ? ? ? ? ? ? ? .setSocketTimeout(5000)
? ? ? ? ? ? ? ? ? ? // 設置是否允許重定向(默認為true)
? ? ? ? ? ? ? ? ? ? .setRedirectsEnabled(true).build();
?
? ? ? ? ? ? // 將上面的配置信息 運用到這個Get請求里
? ? ? ? ? ? httpGet.setConfig(requestConfig);
?
? ? ? ? ? ? // 由客戶端執行(發送)Get請求
? ? ? ? ? ? response = httpClient.execute(httpGet);
?
? ? ? ? ? ? // 從響應模型中獲取響應實體
? ? ? ? ? ? HttpEntity responseEntity = response.getEntity();
? ? ? ? ? ? System.out.println("響應狀態為:" + response.getStatusLine());
? ? ? ? ? ? if (responseEntity != null) {
? ? ? ? ? ? ? ? System.out.println("響應內容長度為:" + responseEntity.getContentLength());
? ? ? ? ? ? ? ? //主動設置編碼,防止相應出現亂碼
? ? ? ? ? ? ? ? System.out.println("響應內容為:" + EntityUtils.toString(responseEntity, StandardCharsets.UTF_8));
? ? ? ? ? ? }
? ? ? ? } catch (ClientProtocolException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } catch (ParseException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } finally {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? // 釋放資源
? ? ? ? ? ? ? ? if (httpClient != null) {
? ? ? ? ? ? ? ? ? ? httpClient.close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (response != null) {
? ? ? ? ? ? ? ? ? ? response.close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
POST
? /**
? ? ?* POST---有參測試(對象參數)
? ? ?*
? ? ?* @date
? ? ?*/
? ? @Test
? ? public void dopostHaveObjectParam() {
?
? ? ? ? // 獲得Http客戶端(可以理解為:你得先有一個瀏覽器;注意:實際上HttpClient與瀏覽器是不一樣的)
? ? ? ? CloseableHttpClient httpClient = HttpClientBuilder.create().build();
?
? ? ? ? // 創建Post請求
? ? ? ? HttpPost httpPost = new HttpPost("http://localhost:8080/user");
? ? ? ? User user = new User();
? ? ? ? user.setUserName("張山");
? ? ? ? user.setPassword("Ss@1234");
? ? ? ? // 我這里利用阿里的fastjson,將Object轉換為json字符串;
? ? ? ? // (需要導入com.alibaba.fastjson.JSON包)
? ? ? ? String jsonString = JSON.toJSONString(user);
? ? ? ? // ?主動設置編碼,防止出現亂碼
? ? ? ? StringEntity entity = new StringEntity(jsonString, "UTF-8");
?
? ? ? ? // post請求是將參數放在請求體里面傳過去的;這里將entity放入post請求體中
? ? ? ? httpPost.setEntity(entity);
?
? ? ? ? httpPost.setHeader("Content-Type", "application/json;charset=utf8");
?
? ? ? ? // 響應模型
? ? ? ? CloseableHttpResponse response = null;
? ? ? ? try {
? ? ? ? ? ? // 由客戶端執行(發送)Post請求
? ? ? ? ? ? response = httpClient.execute(httpPost);
? ? ? ? ? ? // 從響應模型中獲取響應實體
? ? ? ? ? ? HttpEntity responseEntity = response.getEntity();
?
? ? ? ? ? ? System.out.println("響應狀態為:" + response.getStatusLine());
? ? ? ? ? ? if (responseEntity != null) {
? ? ? ? ? ? ? ? System.out.println("響應內容長度為:" + responseEntity.getContentLength());
? ? ? ? ? ? ? ? //主動設置編碼,防止相應出現亂碼
? ? ? ? ? ? ? ? System.out.println("響應內容為:" + EntityUtils.toString(responseEntity, StandardCharsets.UTF_8));
? ? ? ? ? ? }
? ? ? ? } catch (ClientProtocolException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } catch (ParseException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } finally {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? // 釋放資源
? ? ? ? ? ? ? ? if (httpClient != null) {
? ? ? ? ? ? ? ? ? ? httpClient.close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (response != null) {
? ? ? ? ? ? ? ? ? ? response.close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }

PUT
? /**
? ? ?* Put---有參測試(對象參數)
? ? ?*
? ? ?* @date
? ? ?*/
? ? @Test
? ? public void doPutObjectParam() {
?
? ? ? ? // 獲得Http客戶端(可以理解為:你得先有一個瀏覽器;注意:實際上HttpClient與瀏覽器是不一樣的)
? ? ? ? CloseableHttpClient httpClient = HttpClientBuilder.create().build();
?
? ? ? ? // 創建Put請求
? ? ? ? HttpPost httpPut = new HttpPost("http://localhost:8080/user");
? ? ? ? User user = new User();
? ? ? ? user.setId((long) 2);
? ? ? ? user.setUserName("張山");
? ? ? ? user.setPassword("Ss@1234");
? ? ? ? // 我這里利用阿里的fastjson,將Object轉換為json字符串;
? ? ? ? // (需要導入com.alibaba.fastjson.JSON包)
? ? ? ? String jsonString = JSON.toJSONString(user);
? ? ? ? // ?主動設置編碼,防止出現亂碼
? ? ? ? StringEntity entity = new StringEntity(jsonString, "UTF-8");
?
? ? ? ? // post請求是將參數放在請求體里面傳過去的;這里將entity放入Put請求體中
? ? ? ? httpPut.setEntity(entity);
?
? ? ? ? httpPut.setHeader("Content-Type", "application/json;charset=utf8");
?
? ? ? ? // 響應模型
? ? ? ? CloseableHttpResponse response = null;
? ? ? ? try {
? ? ? ? ? ? // 由客戶端執行(發送)Put請求
? ? ? ? ? ? response = httpClient.execute(httpPut);
? ? ? ? ? ? // 從響應模型中獲取響應實體
? ? ? ? ? ? HttpEntity responseEntity = response.getEntity();
?
? ? ? ? ? ? System.out.println("響應狀態為:" + response.getStatusLine());
? ? ? ? ? ? if (responseEntity != null) {
? ? ? ? ? ? ? ? System.out.println("響應內容長度為:" + responseEntity.getContentLength());
? ? ? ? ? ? ? ? //主動設置編碼,防止相應出現亂碼
? ? ? ? ? ? ? ? System.out.println("響應內容為:" + EntityUtils.toString(responseEntity, StandardCharsets.UTF_8));
? ? ? ? ? ? }
? ? ? ? } catch (ClientProtocolException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } catch (ParseException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } finally {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? // 釋放資源
? ? ? ? ? ? ? ? if (httpClient != null) {
? ? ? ? ? ? ? ? ? ? httpClient.close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (response != null) {
? ? ? ? ? ? ? ? ? ? response.close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
Delete?
? /**
? ? ?* DeleteTest
? ? ?*/
?
? ? @Test
? ? public void doDeleteTest() {
? ? ? ? // 獲得Http客戶端(可以理解為:你得先有一個瀏覽器;注意:實際上HttpClient與瀏覽器是不一樣的)
? ? ? ? CloseableHttpClient httpClient = HttpClientBuilder.create().build();
? ? ? ? // 創建Delete請求
? ? ? ? HttpDelete httpDelete = new HttpDelete("http://localhost:8080/user/41");
? ? ? ? // 響應模型
? ? ? ? CloseableHttpResponse response = null;
? ? ? ? try {
? ? ? ? ? ? // 配置信息
? ? ? ? ? ? RequestConfig requestConfig = RequestConfig.custom()
? ? ? ? ? ? ? ? ? ? // 設置連接超時時間(單位毫秒)
? ? ? ? ? ? ? ? ? ? .setConnectTimeout(5000)
? ? ? ? ? ? ? ? ? ? // 設置請求超時時間(單位毫秒)
? ? ? ? ? ? ? ? ? ? .setConnectionRequestTimeout(5000)
? ? ? ? ? ? ? ? ? ? // socket讀寫超時時間(單位毫秒)
? ? ? ? ? ? ? ? ? ? .setSocketTimeout(5000)
? ? ? ? ? ? ? ? ? ? // 設置是否允許重定向(默認為true)
? ? ? ? ? ? ? ? ? ? .setRedirectsEnabled(true).build();
?
? ? ? ? ? ? // 將上面的配置信息 運用到這個Delete請求里
? ? ? ? ? ? httpDelete.setConfig(requestConfig);
?
? ? ? ? ? ? // 由客戶端執行(發送)Delete請求
? ? ? ? ? ? response = httpClient.execute(httpDelete);
?
? ? ? ? ? ? // 從響應模型中獲取響應實體
? ? ? ? ? ? HttpEntity responseEntity = response.getEntity();
? ? ? ? ? ? System.out.println("響應狀態為:" + response.getStatusLine());
? ? ? ? ? ? if (responseEntity != null) {
? ? ? ? ? ? ? ? System.out.println("響應內容長度為:" + responseEntity.getContentLength());
? ? ? ? ? ? ? ? //主動設置編碼,防止相應出現亂碼
? ? ? ? ? ? ? ? System.out.println("響應內容為:" + EntityUtils.toString(responseEntity, StandardCharsets.UTF_8));
? ? ? ? ? ? }
? ? ? ? } catch (ClientProtocolException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } catch (ParseException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } finally {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? // 釋放資源
? ? ? ? ? ? ? ? if (httpClient != null) {
? ? ? ? ? ? ? ? ? ? httpClient.close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (response != null) {
? ? ? ? ? ? ? ? ? ? response.close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
————————————————
版權聲明:本文為CSDN博主「紫金小飛俠」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yangshengwei230612/article/details/103964905

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162890.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162890.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162890.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信息系統項目管理師-干系人管理論文提綱

快速導航 1.信息系統項目管理師-項目整合管理 2.信息系統項目管理師-項目范圍管理 3.信息系統項目管理師-項目進度管理 4.信息系統項目管理師-項目成本管理 5.信息系統項目管理師-項目質量管理 6.信息系統項目管理師-項目資源管理 7.信息系統項目管理師-項目溝通管理 8.信息系…

景區智慧旅游智能化系統方案:PPT全文58頁,附下載

關鍵詞&#xff1a;智慧景區解決方案&#xff0c;智慧文旅解決方案&#xff0c;智慧旅游解決方案&#xff0c;智慧文旅綜合運營平臺 一、景區智慧旅游智能化系統建設背景 近年來&#xff0c;隨著信息技術的快速發展和普及&#xff0c;以及旅游市場的不斷擴大和升級&#xff0…

電腦自動刪除文件怎么辦?如何恢復?

在數字化時代&#xff0c;電腦已經成為人們不可或缺的工具之一。然而&#xff0c;由于各種原因&#xff0c;我們有時會遇到電腦自動刪除文件的情況&#xff0c;這給我們的工作和生活帶來了很多不便。那么&#xff0c;當電腦自動刪除文件時&#xff0c;我們應該如何處理呢&#…

【Python爬蟲】8大模塊md文檔從0到scrapy高手,第8篇:反爬與反反爬和驗證碼處理

本文主要學習一下關于爬蟲的相關前置知識和一些理論性的知識&#xff0c;通過本文我們能夠知道什么是爬蟲&#xff0c;都有那些分類&#xff0c;爬蟲能干什么等&#xff0c;同時還會站在爬蟲的角度復習一下http協議。 Python爬蟲和Scrapy全套筆記直接地址&#xff1a; 請移步這…

數據結構與算法編程題14

設計一個算法&#xff0c;通過一趟遍歷在單鏈表中確定值最大的結點。 #include <iostream> using namespace std;typedef int Elemtype; #define ERROR 0; #define OK 1;typedef struct LNode {Elemtype data; //結點保存的數據struct LNode* next; //結構體指針…

RedHat NTP時間服務器配置Chrony(所有節點時間跟主節點時間同步)

NTP NTP&#xff08;Network Time Protocol&#xff09;是一種用于在計算機網絡中同步時鐘的協議。它的主要目的是確保網絡中的各個設備具有準確的時間參考&#xff0c;以便協調事件順序、安全通信和日志記錄等應用。它通過分層體系結構、時間同步算法和準確的時間參考源來確保…

Linux設置靜態IP

Linux設置靜態IP 使用ip addr查看ip&#xff0c;如下所示就是動態IP 1、什么是靜態IP&#xff1f; 靜態ip就是固定的ip&#xff0c;需要手動設置。靜態IP地址&#xff08;又稱固定IP地址&#xff09;是長期分配給一臺計算機或網絡設備使用的 IP 地址。一般來說&#xff0c;一…

【數據結構】C : 追星

C : 追星 文章目錄 C : 追星DescriptionInputOutputSampleInputOutput 解題思路AC代碼&#xff1a; Description 城市總共有N座。yintama是右京女神的狂熱粉&#xff0c;當他得知右京女神將要在城市N舉辦演唱會的時候&#xff0c;馬上開始準備動身前往城市N。原本他可以直接乘…

738. Monotone Increasing Digits 968. Binary Tree Cameras

738. Monotone Increasing Digits An integer has monotone increasing digits單調遞增數字 if and only if each pair of adjacent digits x and y satisfy x < y. Given an integer n, return the largest number that is less than or equal to n with monotone increa…

TypeScript 學習筆記 第三部分 貪吃蛇游戲

尚硅谷TypeScript教程&#xff08;李立超老師TS新課&#xff09; 1. 創建開發環境 創建工程&#xff0c;使用學習筆記的第二部分安裝css部分 npm i -D less less-loader css-loader style-loader對css部分處理&#xff0c;能夠運行在低版本瀏覽器 npm i -D postcss postcss…

oracle rac 19c修改不同網段public ip

客戶需求將才搭建的oracle 19.19數據庫從192.168.168.0網段調整到192.168.213網段 1.停止兩個節點集群 停止之前最好ocrdump一下&#xff0c;防止有問題 crsctl stop crs 2.修改public ip地址和/etc/hosts 3. 啟動crs 這時集群可以啟動&#xff0c;但是上面的一些資源啟動會…

音色逼真、韻律自然的AI人聲克隆限時福利!

聲音&#xff0c;為數字人注入靈魂。 2023云棲大會上&#xff0c;阿里云視頻云接受了CCTV-2財經頻道的采訪&#xff0c;分享并演示了如何利用云端智能剪輯&#xff0c;一站式完成數字人渲染及視頻精編二創。 正如視頻開頭所呈現的AI重現演員“原聲”&#xff0c;近年來&#x…

基于SpringBoot的圖書管理系統

基于SpringBoot的圖書管理系統 圖書管理系統開發技術功能模塊代碼結構數據庫設計運行截圖源碼獲取 圖書管理系統 開發技術 技術&#xff1a;SpringBoot、MyBatis-Plus、MySQL、Beetl、Layui。 框架&#xff1a;基于開源框架Snowy-Layui開發。 工具&#xff1a;IDEA、Navicat等…

【Linux】進程間通信——進程間通信的介紹和分類、管道、匿名管道、命名管道、匿名管道與命名管道的區別

文章目錄 進程間通信1.進程間通信的介紹1.1目的和發展 2.進程間通信分類3.管道3.1匿名管道3.1.1匿名管道的原理&#xff08;文件角度&#xff09;3.1.2匿名管道的原理&#xff08;內核角度&#xff09;3.1.3管道讀寫規則3.1.4管道特點 3.2命名管道3.2.1創建命名管道3.2.2命名管…

PTA-列出所有祖先結點

對于給定的二叉樹&#xff0c;本題要求你按從上到下順序輸出指定結點的所有祖先結點。 輸入格式: 首先第一行給出一個正整數 N&#xff08;≤10&#xff09;&#xff0c;為樹中結點總數。樹中的結點從 0 到 N?1 編號。 隨后 N 行&#xff0c;每行給出一個對應結點左右孩子的…

談思生物醫療直播 | 利用類器官模型研究肺的發育與穩態

類器官是一種三維細胞培養物&#xff0c;其在細胞類型&#xff0c;空間結構及生理功能上能夠模擬對應器官&#xff0c;從而提供一個高度生理相關的系統。自2009年小腸類器官首次建立至今&#xff0c;類器官研究已經延伸到多個組織系統&#xff0c;并成為當下生命科學領域最熱門…

element plus 使用細節

菜鳥一直在糾結這個寫不寫&#xff0c;因為不難&#xff0c;但是菜鳥老是容易忘記&#xff0c;雖然想想或者搜搜就可以馬上寫出來&#xff0c;但是感覺每次那樣就太麻煩了&#xff0c;不如一股做氣寫了算了&#xff0c;后面遇見別的就再來補充&#xff01; 文章目錄 table 表格…

美創獲IDC數據庫安全市場代表廠商推薦,一路引領數據庫安全

近日&#xff0c;全球領先的IT市場研究和咨詢公司IDC發布《IDC Persepctive&#xff1a;中國數據庫安全市場洞察&#xff0c;2023》報告。 憑借多年的技術積累和豐富的產品體系與行業實踐&#xff0c;美創科技獲「代表廠商」推薦&#xff0c;再次彰顯專業領先能力&#xff01; …

Mybatis一級緩存和二級緩存原理剖析與源碼詳解

Mybatis一級緩存和二級緩存原理剖析與源碼詳解 在本篇文章中&#xff0c;將結合示例與源碼&#xff0c;對MyBatis中的一級緩存和二級緩存進行說明。 MyBatis版本&#xff1a;3.5.2 文章目錄 Mybatis一級緩存和二級緩存原理剖析與源碼詳解?級緩存場景一場景二?級緩存原理探究…

責任鏈模式 (Chain of Responsibility Pattern)

定義 責任鏈模式是一種行為型設計模式&#xff0c;用于在對象間建立一條處理請求的鏈。它允許多個對象有機會處理請求&#xff0c;從而減少請求的發送者和接收者之間的耦合。在責任鏈模式中&#xff0c;每個接收者包含對另一個接收者的引用&#xff0c;形成一條鏈。如果一個對…