在被測接口並無明確的接口文檔給出時,咱們須要藉助抓包工具來幫助測試,利用抓包工具咱們幾乎能夠得到接口文檔中能給你的一切。常見的抓包工具備Charles和Fiddler, Fiddler只能用在Windows平臺, 而Charles可用於Windows, Mac, IOS和Android多平臺。css
抓包的原理是經過成爲電腦或者移動設備的代理截取請求和請求結果達到分析抓包的目的。就是說,我們的請求從客戶端發送,直到本地客戶端顯示出結果是通過了幾個步驟的:請求發送給服務端,服務端接收請求並處理,服務端將結果返回給客戶端。代理就是在客戶端以及服務端之間設一道關卡,能夠監控到來往的數據包,而且能夠將其篡改。前端
fiddler後端
下載地址:https://www.charlesproxy.com/download/api
破解攻略:https://www.zzzmode.com/mytools/charles/瀏覽器
按照上面的內容,很容易就能安裝好咱們要的 Charles,打開以下:服務器
Charles 提供了兩個不一樣的視圖方式:Structure & Sequencecookie
Structure 是將請求按照域名進行分類,按照路徑逐級分類:工具
Sequence 則是將請求按照訪問時間前後順序分類:post
上面咱們提到,抓包工具實際上是代理進行的,那麼咱們怎麼設置代理的端口呢?測試
Proxy ==> Proxy Settings ==> Proxies ==> Port ,默認是 8888,這裏咱們不予更改,若是端口被佔用,能夠考慮修改此端口號進行抓包,將客戶端(瀏覽器/移動端)的代理端口也設置成 8888 。Charles 才能正確創建代理
那麼還有一個問題,咱們怎麼設置只抓取某個 ip 的請求呢?無關請求,咱們不須要,好比某輸入法,qq 等,是咱們不須要的請求;並且,通常來說,咱們是抓取跟後臺交互的請求,也就是說 js,css,jpg 等這些圖片,咱們是不須要抓取的,那麼怎麼過濾這些無關請求呢?
好比說,咱們只要博客園的請求,那麼咱們就設置:Proxy ==> Recording Settings ==> Include ==> Add ==> Host 內填入想要抓取(博客園)的域名 ==> OK ==> OK
抓取瀏覽器請求很簡單,跟上面說明好的配置 ok 就成,假設咱們也鏈接了移動端設備,Proxy 內選擇 Windows Proxy 便可
那麼怎麼抓取 https 請求呢?
爲何用 Android 舉例呢?由於本人用的就是小米6(Are you OK?),這裏待補充,具體作法就是手機上要安裝 Charles 證書,才能抓取到
僅僅知道怎麼抓包遠遠不夠,還須要掌握如何利用抓包工具對要發往服務器的請求與進行攔截並篡改,以及對服務端返回的數據進行攔截,篡改返回的數據。那麼你可能會問了,爲何要改這些數據呢?
在咱們的接口測試中,利用抓包工具攔截請求修改的話,能夠初步驗證該接口的某些問題。好比說:咱們在前端頁面上下拉框選擇一個選項,而後查詢,假設不能修改請求,就只能發送選擇的請求;那麼假設咱們攔截了,修改爲下拉框沒有的內容,再發往服務器,就能驗證先後端是否有校驗。若是服務器接受了下拉框不存在的請求而且處理,說明後端是沒有校驗的。還有不少狀況,例如修改 cookie ,前端限制了輸入字符串的長度等,均可以經過接口去測試後端是否校驗。
那麼爲何咱們要攔截返回的數據,修改在頁面展現的狀況呢?仍是同樣的,假設咱們一個表單保存後,重定向到顯示的列表,數字有位數限制,好比兩位小數,那麼咱們能夠修改返回的數據。
具體如何攔截修改呢?
假設,咱們抓取 http://doc.nnzhp.cn/ 信息,篡改請求的內容,或者修改搜索的內容:
一、首先咱們抓一下 http://api.nnzhp.cn/api/user/stu_info?stu_name=%E5%B0%8F%E9%BB%91 的響應結果,而且對相應的 url和路徑打斷點,這裏要注意,這裏的斷點有個相似於做用域的範圍,假設咱們對某個路徑進行斷點,那麼表明該路徑下的全部請求都要會被攔截。
二、接着,咱們清空 Charles 內的請求,而後去瀏覽器再請求一下該連接,將攔截的請求修改,看看結果:
發現瀏覽器頁面一直在跳轉,可是沒結果,這說明請求成功攔截了,咱們看看 Charles ,成功攔截下了請求,在 Edit Request 內可對請求進行修改,再發送到服務期內,咱們將"小黑"改爲"小白"試試:
修改成"小白",發送到服務器:
返回的結果以下:
這個返回的結果,咱們也是能夠修改的,也就是修改相應內容,咱們把第一條"小白"改爲"小王八",其餘的不變,看看瀏覽器結果:
能夠看到,咱們發送的請求爲 小黑,接收到的結果爲:小王八+小白,這裏舉的例子是對 get 請求進行修改,那麼 post 請求實際上是同樣的。
注意,斷點打完了記得取消掉,不然請求將會被攔截哦