IDEA HTTP Client(史上最全)


文章很長,建議收藏起來,慢慢讀! Java 高並發 發燒友社群:瘋狂創客圈 奉上以下珍貴的學習資源:


史上最全 Java 面試題 21 專題

史上最全 Java 面試題 21 專題 阿里、京東、美團、頭條.... 隨意挑、橫着走!!!
1.Java算法面試題(史上最強、持續更新、吐血推薦) https://www.cnblogs.com/crazymakercircle/p/14377410.html
2.JVM面試題(史上最強、持續更新、吐血推薦) https://www.cnblogs.com/crazymakercircle/p/14365820.html
3.Java基礎面試題(史上最全、持續更新、吐血推薦) https://www.cnblogs.com/crazymakercircle/p/14366081.html
4.死鎖面試題(史上最強、持續更新) https://www.cnblogs.com/crazymakercircle/p/14323919.html
5.多線程、線程池、內置鎖 面試題 (史上最強、持續更新) https://www.cnblogs.com/crazymakercircle/p/13903850.html
6.JUC並發包與容器類 - 面試題(史上最強、持續更新) https://www.cnblogs.com/crazymakercircle/p/13904029.html
7.SpringBoot - 面試題(史上最強、持續更新) https://www.cnblogs.com/crazymakercircle/p/14365487.html
8.Linux面試題(史上最全、持續更新、吐血推薦) https://www.cnblogs.com/crazymakercircle/p/14366893.html
9.網絡協議面試題(史上最全、持續更新、吐血推薦) https://www.cnblogs.com/crazymakercircle/p/14370335.html
10、Zookeeper 面試題(史上最強、持續更新) https://www.cnblogs.com/crazymakercircle/p/13900183.html
11、Mysql 面試題(史上最強、持續更新) https://www.cnblogs.com/crazymakercircle/p/13900186.html
12、Redis 面試題 - 收藏版(史上最強、持續更新) https://www.cnblogs.com/crazymakercircle/p/13900198.html
13、SpringCloud 面試題 - 收藏版(史上最強、持續更新) https://www.cnblogs.com/crazymakercircle/p/13900212.html
14、Netty 面試題 (史上最強、持續更新) https://www.cnblogs.com/crazymakercircle/p/13903625.html
15、消息隊列、RabbitMQ、Kafka、RocketMQ面試題 (史上最全、持續更新) https://www.cnblogs.com/crazymakercircle/p/14367425.html
16、分布式事務面試題 (史上最全、持續更新、吐血推薦) https://www.cnblogs.com/crazymakercircle/p/14375424.html
17、設計模式面試題 (史上最全、持續更新、吐血推薦) https://www.cnblogs.com/crazymakercircle/p/14367101.html
18、架構設計面試題 (史上最全、持續更新、吐血推薦) https://www.cnblogs.com/crazymakercircle/p/14367907.html
19、Spring面試題 專題部分 https://www.cnblogs.com/crazymakercircle/p/14465630.html
20、SpringMVC面試題 專題部分 https://www.cnblogs.com/crazymakercircle/p/14465630.html
21、Tomcat面試題 專題部分 https://www.cnblogs.com/crazymakercircle/p/14465630.html

IDEA HTTP Client 優點

(1)腳本化 mock

(2)免復制 token

..... 一大堆

總之,IDEA HTTP Client調試工具真是太好用了

與Postman 的PK

以前用Postman的場景是這樣的:

img

實際遠遠不止這幾個文件夾來歸類多個產品線的接口,Postman的功能非常強大,但是面對以下這些狀況時,我覺得調試一個接口太麻煩了 (這里不討論工具的好壞,工具是幫助我們提高效率的,每個人的需求也不一樣,我只說明我個人遇到的一些情況,不喜請勿噴)

  • 查找配置多數要通過鼠標點來點去, 與習慣文本和快捷鍵操作的便捷方式違背
  • 調試別人接口要導入他們的一些數據,比較麻煩
  • 多個產品線環境變量查看不直觀
  • 寫完接口要來回切換應用進行測試,比如(IDEA <——> Postman)
  • 快速定位接口比較麻煩
  • ......

IntelliJ IDEA 的 HTTP Client 工具剛好能解決上面提到的一些問題,

Http Client 驗處之旅

官方的演示小動圖:

img

對於企業版, HTTP Client 是 IDEA 默認安裝,並且啟用的插件,具體如下:

看起來: 寶貝就在我們電腦里,只是沒有發現!

在這里插入圖片描述

如果看不明白,那么, 首先來驗一下處:

點擊菜單:ToolsHTTP ClientTest RESTful Web Service

在這里插入圖片描述

接下來進入下面的界面:

在這里插入圖片描述

填好 ip,端口, 路徑,點擊執行,可以看到結果

在這里插入圖片描述

是不是解決了經常idea和postman切換的問題,postman 就可以扔掉了。

然后,這僅僅是 Http Client 組件使用的開始!!!!!!

!!!!!!

上圖的根據詳細的說明:

在這里插入圖片描述

Rest 接口可執行文件

看到標題了嗎? 沒有錯,就是使用一個.http后綴(或.rest后綴)的文本文件,將可執行的Rest 接口和參數,統一管理起來, 組成一個Rest 接口可執行文件

Http Client 組件的牛逼之處,就是這個 :Rest 接口可執行文件

方式1: 通過工具按鈕創建

在這里插入圖片描述

默認會創建一個名為 rest-api.http 的文件,該文件被存儲在 用戶目錄的 Scratches 文件夾下。

接下來就可以改rest-api.http 的文件中執行 Rest 接口, 效果如下:

在這里插入圖片描述

方式2:直接創建 HTTP request 文件

  • 史上最為簡單的創建方式:

通過菜單操作 File—New—HTTP Request

在這里插入圖片描述

所文件存放在我們指定的目錄下,就和我們平時創建class/package是一樣一樣滴

  • 史上最為直接的創建方式:

直接創建一個擴展名為 .http 或者 .rest 的普通文件,over

在這里插入圖片描述

HTTP request 文件的最大優勢:

它可以作為項目文件,通過 Git 提交到倉庫,大家共享文件,共同維護接口請求數據,自然就不會出現調試別人接口還要導入他人數據的情況啦

總之,就是方便 測試用例、測試參數、測試數據的 共享,明白了嗎?

Rest 接口可執行文件的接口語法

請求的語法基本上和 http 協議內容是一致的,結構如下

### 使用三個 # 來分隔多個請求

GET/POST 請求地址(可拼接查詢參數)
請求頭鍵值對

請求體

> {% %}

# 響應處理
# 使用 >符號 打頭,和 shell 很像,然后用 {% %} 括起來的腳本內容
# 在腳本中可以使用 javascript 原生語法,這就很強大了
# 腳本中有幾個內置對象 client 表示當前客戶端,response 表示響應結果

發送請求:

對於 .http 文件中的一些簡單語法 :

  1. 注釋 : // 或者 #
  2. 使用三個 # 號分割 request 請求 : ###
  3. web 的 basic 或者 digest 認證

eg: 普通請求體

POST http://example.com:8080/api/html/post
Content-Type: application/json 

{ "key" : "value", "list": [1, 2, 3] }

eg: 不添加執行日志

// @no-log
GET example.com/api

eg: web 的 basic 或者 digest 認證

// Basic authentication
GET http://example.com
Authorization: Basic username password

###

// Digest authentication
GET http://example.com
Authorization: Digest username password

處理響應:

將腳本插入請求中

> 開頭,然后把腳本包裝在 {%%} 里面。

斷言 client.assert

GET https://example.com/status/200

> {%
        client.test("Request executed successfully", function() {
        client.assert(response.status === 200, "Response status is not 200");
    });
%}

腳本日志 client.log

client.log("this is log");

在這里插入圖片描述

存儲變量

通過 client.global.set 存儲全局變量,通過 client.global.get 獲取變量。可以通過 client 對象在內存中存儲數據,可以保留到 idea 關閉之前。

除了 get 獲取值外,還可以通過變量獲取值,如圖:

在這里插入圖片描述

那么在一處存儲了變量, 就可以在其他地方調用了,非常適合處理 token,就有點像瀏覽器登錄了…

輔助功能說明

RestfulToolkit

RestfulToolkit 同樣是個插件,在插件市場搜索安裝即可

在這里插入圖片描述

安裝了這個插件后,打開側邊欄,項目的所有接口信息都會展現在此處:

在這里插入圖片描述

我常用的功能就是把指定接口生成的JSON數據拷貝到 HTTP request 文件中,免去手寫的麻煩了,你說方便不?

Live Template

項目中請求內容各有不同,IDEA標准提供的GET POST 請求案例可能還不能滿足我們的需求,這時我們就可以利用 Live Template 定制自己的模版,迅速生成request 內容,像這樣:

img

JSON Viewer

JSON Viewer是一款 Chrome瀏覽器插件,在瀏覽器 Omini-box 中輸入 json-viewer + Tab, 粘貼json在此處,就可以對json數據進行格式化了

img

打開開發者工具,在Network下雙擊某個HTTP請求,會自動在 new tab下格式化返回的json數據,免去了粘貼數據然后格式化的煩惱

常用示例

配置環境信息

這也是它比較強大的一方面,使用一個 json 來配置所有環境,只要在請求腳本目錄下就可以讀到,遵循約定大於配置的原則,文件名 http-client.env.json 表示普通變量可放的地方 http-client.private.env.json 表示密碼等私有變量配置的地方,配置大致如下。在運行請求腳本的時候,idea 會提示你要選哪個環境

{
  "local":{
    "baseUrl": "http://localhost:8083/",
    "checkCode": "http://localhost:8081/sanritools/company/token?env=dev",
  },
  "dev": {
    "baseUrl": "http://devhost:port/",
    "checkCode": "http://localhost:8081/sanritools/company/token?env=dev",
  },
  "sit": {
    "baseUrl": "http://sithost:port/",
    "checkCode": "http://localhost:8081/sanritools/company/token?env=sit",
  }
}

上面的文件,放在rest接口文件的同一個目錄下。

上面的文件, 定義了三個環境類型: sit, local,dev,執行的時候,需要選擇 環境 的 類型:

在這里插入圖片描述

登錄 token 示例

網上的示例基本上都是在說,用一個接口獲取到 token ,然后保存到全局變量中,然后后面的接口就可以直接使用了,代碼如下,但是本人試了無數次都沒成功,再者,你們項目都沒驗證碼的嗎。

### 獲取 token 值
GET {{checkCode}}
Content-Type: application/json

> {%
client.global.set("token", response.body.token);
%}

### 獲取素材列表
POST {{baseUrl}}/media/list
Content-Type: application/json
Authorization: {{token}}

{
  "pageNo": 1,
  "pageSize": 10
}

上面這個是有問題的,返回值 response.body 其它是個 json 字符串並非 javascript 對象,需要解析一下,前面也說了,這里可以使用原生 javascript 腳本,所以 JSON.parse(response.body).token 才能正確獲取到 token ,

第二個問題,我們現在這個 token 是存在 redis 的,所以我可以繞過驗證碼,另寫一個接口去 redis 直接獲取 token ,腳本最終如下

### 獲取 token 值
GET {{checkCode}}
Content-Type: application/json

> {%
client.global.set("token", JSON.parse(response.body).token);
%}

### 獲取素材列表
POST {{baseUrl}}/media/list
Content-Type: application/json
Authorization: {{token}}

{
  "pageNo": 1,
  "pageSize": 10
}

文件傳輸實踐

前面說了,輸入輸出和 shell 中很像,所以這里輸入一個文件使用 < 文件地址,隨便找個 multipart/form-data 的數據格式查看一下,就知道文件怎么傳了,其實在示例中也有,如下面腳本所示,它使用一個 boundary 的 key 綁定當前所要提交多個 part 的數據,每個 part 可以是不同的數據格式 ;

### 測試發送文件信息(文件元數據信息查詢)
POST {{baseUrl}}/media/upload/fileMetaData
Content-Type: multipart/form-data; boundary=WebAppBoundary
Authorization: {{token}}

--WebAppBoundary
Content-Disposition: form-data; name="fileSize"
Content-Type: application/json

1024
--WebAppBoundary
Content-Disposition: form-data; name="md5"
Content-Type: application/json

sdafasdfasfd
--WebAppBoundary
Content-Disposition: form-data; name="partFile"; filename="zhongwenbuxin.avi"
Content-Type: application/octet-stream

< C:\Users\091795960\Videos/V0106_1024KB.avi
--WebAppBoundary--

對於返回信息亂碼我沒有碰到,也沒有設置網上說的消息頭和啟動配置,返回消息是正常編碼的;我只碰到了上傳上去的文件名是亂碼的,怎么設置都不生效,沒找到解決辦法,但自測的話,取個英文名也沒關系,有哪位大神解決了可以告訴我一下。

關於其它斷言的使用,和日志的使用可以找其它的博客,這里列一篇以供參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM