IntelliJ IDEA 自帶的 HTTP Client接口調用插件,替代 Postman

文章目錄

    • 引言
    • 建議目錄結構
    • 新建請求
    • 不同環境的變量配置
      • 添加環境
      • http-client.env.json
      • http-client.private.env.json
      • 引用變量
    • 請求示例
      • Get請求示例
      • Post請求示例
      • 鑒權示例
      • 斷言示例
      • Websocket請求示例
    • 內置對象和動態變量
      • 內置對象:
      • 內置變量:

引言

在日常的 Web 服務開發和調試中,我們經常需要對接口進行調用和測試。無論是在與團隊內部協作開發時,還是在與第三方系統進行接口聯調時,接口調用是不可或缺的一環。而在這個過程中,許多開發者會首選一款功能強大且易用的工具,其中最常見的就是 Postman —— 這是一款備受歡迎的接口調試工具,擁有豐富的功能和用戶友好的界面。

然而,隨著開發工具的不斷演進,一些集成開發環境(IDE)也提供了強大的工具來簡化和優化接口調用的過程。其中,IntelliJ IDEA 作為一款廣泛使用的 Java 開發工具,自帶了一個強大的 HTTP Client 接口調用插件,為開發者提供了一種替代 Postman 的選擇。

建議目錄結構

srcmaintest    http├── AXXX.http                     # 調用A接口的文件├── BXXX.http                     # 調用B接口的文件├── http-client.env.json          # 通用配置(接口地址等)├── http-client.private.env.json  # 私有配置(密碼、Token等)

新建請求

  • 入口一:工具欄(idea頂上的一行工具里面)->Tools->HTTP Client。創建的是臨時文件,不跟項目關聯。

在這里插入圖片描述

  • 入口二:點擊接口旁邊的這個圖標,可以自動生成接口的url請求。創建的是臨時文件,不跟項目關聯。

  • 入口三:通過 cURL 創建請求,在xxx.http文件上,點擊右上角的 Convert form cURL 按鈕,然后輸入 cURL 地址即可自動轉換。

  • 入口四:可以在項目中測試目錄(或者其他目錄)下建一個http目錄,右擊New->HTTP Request,輸入文件名稱(.http結尾)即可創建。建議用這個,跟項目關聯

從http請求跳轉到接口層的代碼

光標放在url上面,然后 Ctrl + 鼠標左鍵可以打開,可以從http請求跳轉到接口層的代碼。

請求結果

所有的請求結果,請求歷史記錄,cookies等信息會存放在 .idea 文件夾下,如下:

不同環境的變量配置

在 Spring Boot 項目中,我們通常使用 Profile 機制來實現在不同環境中應用不同的配置文件。類似地,在 IntelliJ IDEA 中使用 HTTP Client 插件時,我們也可以借助類似的機制,以便在不同環境下輕松管理和切換配置。

首先,我們可以創建一個名為 http-client.env.json 的配置文件,用于定義通用變量,例如 URL 地址、端口號等。這樣一來,我們可以通過在不同環境中使用不同的配置文件,輕松地適應不同的場景需求。

// http-client.env.json
{"url": "https://api.example.com","port": 8080,"commonHeader": "application/json"
}

其次,為了安全起見,我們還可以創建一個名為 http-client.private.env.json 的配置文件,專門用于存儲敏感變量,例如用戶名/密碼、訪問令牌等。請注意,由于這些信息屬于敏感數據,我們強烈建議不要將 http-client.private.env.json 提交到 Git 倉庫中,以免泄露敏感信息。

// http-client.private.env.json
{"username": "your_username","password": "your_password","token": "your_access_token"
}

最后,需要強調的是,確保將 http-client.private.env.json 添加到項目的 .gitignore 文件中,以防止不小心將敏感信息提交到版本控制系統中。

添加環境

可以設置不同環境的變量,比如dev、test、prod等。

在這里插入圖片描述

http-client.env.json

{"dev": {"host": "localhost","port": 8080,"domain": "localhost:8080","cookie" : "cookieDev"},"test": {"host": "baidu.test.com","port": 8080,"domain": "baidu.test.com","cookie" : "cookieSit"},"prod": {"host": "baidu.com","port": 8080,"domain": "baidu.com","cookie" : "cookieDevProd"}
}

http-client.private.env.json

{"dev": {"username": "","password": ""},"test": {"username": "","password": ""},"prod": {"username": "","password": ""}  
}

引用變量

要引用這些定義變量,只需要使用{{}} 這個符號即可。比如引用domain ,可以用 {{domain}}。

引用的環境變量如下:

POST http://{{domain}}/dangerWork/query
Content-Type: application/json
Cookie:{{cookie}}{"xxx": "xxx"
}

運行時,自行選擇運行環境。

請求示例

Get請求示例

### 帶有頭部的 GET 請求
GET https://httpbin.org/ip
Accept: application/json### 帶有參數的 GET 請求
GET https://httpbin.org/get?show_env=1
Accept: application/json### 使用環境變量的 GET 請求
GET {{host}}/get?show_env={{show_env}}
Accept: application/json### 禁用重定向的 GET 請求
# @no-redirect
GET http://httpbin.org/status/301### 帶有動態變量的 GET 請求
GET http://httpbin.org/anything?id={{$uuid}}&ts={{$timestamp}}### 禁止將請求保存到請求歷史記錄
// @no-log
GET example.com/api### 禁止將收到的 cookie 保存到 cookie jar
// @no-cookie-jar
GET example.com/api### 

Post請求示例

### 第一行:POST請求,請求地址
### 第二 三行:請求頭信息,多個請求頭信息依次寫下去(第三行、第四行……)
### 第N行:寫具體的請求體,這里是JSON串,請求頭和請求體之間要空出一行
### 多個請求間用 ### 分割
### 可以用 ptr 快捷提示 form表單是 ptrp### 發送帶有 JSON 主體的 POST 請求
POST https://httpbin.org/post
Content-Type: application/json{"id": 999,"value": "content"
}### 發送將主體作為參數的 POST 請求
POST https://httpbin.org/post
Content-Type: application/x-www-form-urlencodedid=999&value=content### 發送包含文本和文件字段的表單
POST https://httpbin.org/post
Content-Type: multipart/form-data; boundary=WebAppBoundary--WebAppBoundary
Content-Disposition: form-data; name="element-name"
Content-Type: text/plainName
--WebAppBoundary
Content-Disposition: form-data; name="data"; filename="data.json"
Content-Type: application/json< ./request-form-data.json
--WebAppBoundary--### 發送帶有請求主體中動態變量的請求
POST https://httpbin.org/post
Content-Type: application/json{"id": {{$uuid}},"price": {{$randomInt}},"ts": {{$timestamp}},"value": "content"
}###

鑒權示例

### 基本授權。
GET https://httpbin.org/basic-auth/user/passwd
Authorization: Basic user passwd### 帶有變量的基本授權。
GET https://httpbin.org/basic-auth/user/passwd
Authorization: Basic {{username}} {{password}}### 摘要授權。
GET https://httpbin.org/digest-auth/realm/user/passwd
Authorization: Digest user passwd### 帶有變量的摘要授權。
GET https://httpbin.org/digest-auth/realm/user/passwd
Authorization: Digest {{username}} {{password}}### 令牌授權,第 1 部分。檢索并保存令牌。
POST https://httpbin.org/post
Content-Type: application/json{"token": "my-secret-token"
}> {% client.global.set("auth_token", response.body.json.token); %}### 令牌授權,第 2 部分。使用令牌進行授權。
GET https://httpbin.org/headers
Authorization: Bearer {{auth_token}}###

斷言示例

### 成功的測試:檢查響應狀態是否為 200
GET https://httpbin.org/status/200> {%
client.test("請求成功執行", function() {client.assert(response.status === 200, "響應狀態不是 200");
});
%}### 失敗的測試:檢查響應狀態是否為 200
GET https://httpbin.org/status/404> {%
client.test("請求成功執行", function() {client.assert(response.status === 200, "響應狀態不是 200");
});
%}### 檢查響應狀態和內容類型
GET https://httpbin.org/get> {%
client.test("請求成功執行", function() {client.assert(response.status === 200, "響應狀態不是 200");
});client.test("響應內容類型為 JSON", function() {var type = response.contentType.mimeType;client.assert(type === "application/json", "期望 'application/json',但收到 '" + type + "'");
});
%}### 檢查響應主體
GET https://httpbin.org/get> {%
client.test("存在 Headers 選項", function() {client.assert(response.body.hasOwnProperty("headers"), "在響應中找不到 'headers' 選項");
});
%}###

Websocket請求示例

### 簡單的 WebSocket 請求
// 可以直接從 Services 工具窗口向服務器發送消息
WEBSOCKET ws://{{$exampleServer}}/ws### 帶有客戶端消息的請求
// 可以在請求體中指定客戶端消息。使用 '===' 來分隔消息。
// 在消息上方添加 '=== wait-for-server',以在收到服務器響應后發送消息。
// 要等待 N 個響應,請添加 '=== wait-for-server' N 次。
WEBSOCKET ws://{{$exampleServer}}/ws
Content-Type: application/json // 我們使用它進行突出顯示===
{"message": "你好,服務器!","repeat": 3
}
=== wait-for-server
=== wait-for-server
{"message": "我們發送這條消息...","repeat": 0
}
===
{"message": "和這條消息一起","repeat": 1
}### 帶有腳本的請求
// 此外,我們還可以使用腳本向服務器發送消息并驗證服務器的消息。
WEBSOCKET ws://{{$exampleServer}}/ws
Content-Type: application/json{"message": "開始的消息"
}> {%var i = 0response.body.onEachMessage((message, unsubscribe, output) => {i++const jsonMessage = JSON.parse(message); // 我們知道我們的示例服務器返回 JSONclient.test("服務器發送了一個帶有 'message' 屬性的 JSON:" + i , () => {client.assert(jsonMessage.message !== undefined)});if (jsonMessage.message.includes("finish")) {unsubscribe() // 移除當前的監聽器return}if (i === 5) {output(JSON.stringify({message: "finish"}));} else {output(JSON.stringify({message: "腳本發送的消息:" + i}));}}, () => {client.log("我們停止了從當前 'onEachMessage' 調用中的 WebSocket 監聽!")});%}

內置對象和動態變量

IntelliJ IDEA 的 HTTP Client 插件內置了一些對象和變量,以便在請求和腳本中執行動態操作。以下是一些常見的內置對象和變量:

內置對象:

每個請求變量

< {%request.variables.set("firstname", "John")
%}
GET http://example.org/{{firstname}}

全局請求變量

GET https://httpbin.org/get> {%client.global.set("my_cookie", response.headers.valuesOf("Set-Cookie")[0]);
%}
  • request 對象
  • client 對象
  • crypto 對象

內置變量:

動態變量在每次運行請求時生成一個值。它們的名稱以 $ 開頭:

  • $uuid$random.uuid:生成一個通用唯一標識符(UUID-v4)。
  • $timestamp:生成當前的UNIX時間戳。
  • $isoTimestamp:生成UTC時區的當前時間戳,以ISO-8601格式表示。
  • $randomInt:生成介于0和1000之間的隨機整數。
  • $random.integer(from, to):生成介于from(包括)和to(不包括)之間的隨機整數,例如 random.integer(100, 500)。如果不提供參數,它將生成介于0和1000之間的隨機整數。
  • $random.float(from, to):生成介于from(包括)和to(不包括)之間的隨機浮點數,例如 random.float(10.5, 20.3)。如果不提供參數,它將生成介于0和1000之間的隨機浮點數。
  • $random.alphabetic(length):生成長度為 length(必須大于0)的大寫和小寫字母序列。
  • $random.alphanumeric(length):生成長度為 length(必須大于0)的大寫和小寫字母、數字和下劃線序列。
  • $random.hexadecimal(length):生成長度為 length(必須大于0)的隨機十六進制字符串。
  • $random.email:生成一個隨機電子郵件地址。
  • $exampleServer:被替換為IntelliJ IDEA內置的Web服務器,僅可通過HTTP Client訪問。此變量用于GraphQL和WebSocket示例中。

例如:

GET http://localhost/api/get?id={{$uuid}}

這些變量和對象允許你在請求執行期間執行條件檢查、日志記錄和動態操作。

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

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

相關文章

關于引用unpkg.com的mars3d相關依賴文件報錯無法請求的說明

問題來源&#xff1a; 1.關于引用unpkg.com的mars3d相關依賴文件報錯無法請求的說明 說明&#xff1a; 1.最近npm、unpkeg都訪問異常&#xff0c;可能是unpkg.com等國外的服務器不穩定導致的請求未響應。 解決方案&#xff1a; 1.請切換靜態文件引入的方式請求相關資源。參…

LaTex:如何在數學環境下打出大的右括號“}“

一般來說多行公式打左大括號都知道使用語法"cases" \begin{cases} foo\\ foo\\ \end{cases}最近需要鍵入右邊大花括號括起來公式的時候犯難了&#xff0c;搜了很多用的都是"\left.array\right}"&#xff0c;看得我昏迷&#xff0c;屢屢報錯。 突然想起很久…

selenium自動化(中)

顯式等待與隱式等待 簡介 在實際工作中等待機制可以保證代碼的穩定性&#xff0c;保證代碼不會受網速、電腦性能等條件的約束。 等待就是當運行代碼時&#xff0c;如果頁面的渲染速度跟不上代碼的運行速度&#xff0c;就需要人為的去限制代碼執行的速度。 在做 Web 自動化時…

PS背景色替換

1.打開ps后右鍵圖層復制 2.隱藏復制的圖層&#xff0c;選擇魔術橡皮擦擦掉不用替換的顏色 3.選中圖層后選擇顏色疊加修改圖層顏色

機器學習-SVM(支持向量機)

推薦課程&#xff1a;【機器學習實戰】第5期 支持向量機 |數據分析|機器學習|算法|菊安醬_嗶哩嗶哩_bilibili 贊美菊神ヾ ( ゜ⅴ゜)&#xff89; 一、什么是支持向量機&#xff1f; 支持向量機&#xff08;Support Vector Machine, SVM&#xff09;是一類按監督學習&#xff0…

RAID(冗余獨立磁盤陣列)介紹(一種用于存儲數據的技術,通過將數據分布在多個硬盤驅動器上,以提高數據的可靠性和性能)

文章目錄 RAID介紹什么是RAID&#xff1f;RAID的歷史RAID的類型RAID 0RAID 1RAID 5RAID 6 RAID的選擇和配置RAID在安裝系統時的應用結論 RAID介紹 RAID&#xff08;冗余獨立磁盤陣列&#xff09;是一種用于存儲數據的技術&#xff0c;它通過將數據分布在多個硬盤驅動器上&…

【神行百里】pandas查詢加速之行索引篇

最近進行大數據處理的時候&#xff0c;發現我以前常用的pandas查詢方法太慢了&#xff0c;太慢了&#xff0c;真是太慢了&#xff0c;查閱資料&#xff0c;遂發現了一種新的加速方法&#xff0c;能助力我飛上天&#xff0c;和太陽肩并肩&#xff0c;所以記錄下來。 1. 場景說明…

跨境獨立站優勢包括哪些?是否值得做呢?

跨境獨立站的優勢主要包括&#xff1a; 自主品牌建設&#xff1a;獨立站可以更好地展示自主品牌形象&#xff0c;提高品牌知名度和美譽度。 獨立域名&#xff1a;獨立站可以擁有自己的域名&#xff0c;更加穩定和可信。 自主運營&#xff1a;獨立站可以自主運營&#xff0c;包…

低版本echarts的升級到新版5.4.0的echarts瀏覽器預警和報錯信息

新版5.4.0的echarts瀏覽器預警和報錯信息 [ECharts] DEPRECATED: ‘normal’ hierarchy in itemStyle has been removed since 4.0. All style properties are configured in itemStyle directly now. 因為normal層被移除&#xff0c;問題代碼如下圖所示 itemStyle: {normal:…

MBR30200FCT-ASEMI大電流肖特基MBR30200FCT

編輯&#xff1a;ll MBR30200FCT-ASEMI大電流肖特基MBR30200FCT 型號&#xff1a;MBR30200FCT 品牌&#xff1a;ASEMI 封裝&#xff1a;TO-220F 最大平均正向電流&#xff1a;30A 最大重復峰值反向電壓&#xff1a;200V 產品引線數量&#xff1a;3 產品內部芯片個數&am…

系統韌性研究(7)| 韌性系統的16大指導原則

不良事件和條件可能會中斷系統&#xff0c;導致系統無法提供必要的功能和服務。正如我在本系列的前幾篇文章中所概述的那樣&#xff0c;韌性是大多數系統的一個基本質量屬性&#xff0c;因為它們提供了關鍵的能力和服務&#xff0c;盡管存在著不可避免的困難&#xff0c;但這些…

文件搜索項目知識介紹

項目背景SQLite介紹SQLite、驅動包下載SQLite使用SQLite和MySQL區別 JDBC搭配SQLiteJDBC原理-創建連接JDBC原理-關閉連接添加和發送SQLJDBC-事務開啟和提交 打包.exe文件線程池線程數量問題 項目背景 需求上&#xff1a;因為Windows的文件搜索工具搜索速度十分的慢&#xff1b…

虛幻學習筆記11—C++結構體、枚舉與藍圖的通信

一、前言 結構體的定義和枚舉類似&#xff0c;枚舉的定義有兩種方式。區別是結構體必須以“F”開頭命名&#xff0c;而枚舉不用。 額外再講了一下藍圖生成時暴露變量的方法。 二、實現 2.1、結構體 1、定義結構體 代碼如下&#xff0c;注意這個定義的代碼一定要在“UCLASS()”…

從零構建屬于自己的GPT系列6:模型本地化部署2(文本生成函數解讀、模型本地化部署、文本生成文本網頁展示、代碼逐行解讀)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 實戰系列 總目錄 有任何問題歡迎在下面留言 本篇文章的代碼運行界面均在PyCharm中進行 本篇文章配套的代碼資源已經上傳 從零構建屬于自己的GPT系列1&#xff1a;數據預處理 從零構建屬于自己的GPT系列2&#xff1a;模型訓…

ThinkPHP連接ORACLE數據庫教程

目錄 概念基本步驟詳細操作問題排除參考 概念 要連接Oracle數據庫&#xff0c;必須有兩個東西&#xff0c;一個PHP官方寫的擴展&#xff0c;一個Oracle官方寫的客戶端PHP是通過擴展去操作oralce客戶端連接的服務端數據庫&#xff0c;所以兩個都不能少&#xff0c;而且版本必須…

【數組】-Lc34-在排序數組中查找元素的第一個和最后一個位置(二分查找 + 兩邊擴展)

寫在前面 最近想復習一下數據結構與算法相關的內容&#xff0c;找一些題來做一做。如有更好思路&#xff0c;歡迎指正。 目錄 寫在前面一、場景描述二、具體步驟1.環境說明2.代碼 寫在后面 一、場景描述 給定一個按照升序排列的整數數組 nums&#xff0c;和一個目標值 target。…

大數據講課筆記1.4 進程管理

文章目錄 零、學習目標一、導入新課二、新課講解&#xff08;一&#xff09;進程概述1、基本概念2、三維度看待進程3、引入多道編程模型&#xff08;1&#xff09;CPU利用率與進程數關系&#xff08;2&#xff09;從三個視角看多進程 4、進程的產生和消亡&#xff08;1&#xf…

5V低壓步進電機驅動芯片GC6150,應用于攝像機,機器人 醫療器械等產品中。具有低噪聲、低振動的特點

GC6150是雙通道5V低壓步進電機驅動器&#xff0c;具有低噪聲、低振動的特點&#xff0c;特別適用于相機變焦對焦系統、萬向架、搖頭機等精度、低噪聲STM控制系統&#xff0c;該芯片為每個通道集成了一個256微步的驅動器。通過SPI & T2C接口&#xff0c;客戶可以方使地調整驅…

Python+Appium自動化測試之元素等待方法與重新封裝元素定位方法

在appium自動化測試腳本運行的過程中&#xff0c;因為網絡不穩定、測試機或模擬器卡頓等原因&#xff0c;有時候會出現頁面元素加載超時元素定位失敗的情況&#xff0c;但實際這又不是bug&#xff0c;只是元素加載較慢&#xff0c;這個時候我們就會使用元素等待的方法來避免這種…

C++ c_str()用法

標準庫的string類提供了3個成員函數來從一個string得到c類型的字符數組&#xff1a;c_str()、data()、copy(p,n)。 c_str()是Borland封裝的String類中的一個函數&#xff0c;它返回當前字符串的首字符地址。換種說法&#xff0c;c_str()函數返回一個指向正規C字符串的常量指針(…