Python+Requests接口測試教程:Fiddler抓包工具

轉載地址:https://blog.csdn.net/qq4165498/article/details/77802642

爲什麼要先學fiddler?

學習接口測試必學http協議,如果直接先講協議,我估計小夥伴們更懵,爲了更好的理解協議,先從抓包開始。
結合抓包工具講http協議更容易學一些。

1.1 抓firefox上https請求

fiddler是一個很好的抓包工具,默認是抓http請求的,對於pc上的https請求,會提示網頁不安全,這時候需要在瀏覽器上安裝證書。
一、網頁不安全
1.用fiddler抓包時候,打開百度網頁:https://www.baidu.com
2.提示:網頁不安全

二、fiddler設置

1.打開菜單欄:Tools>Fiddler Options>HTTPS
2.勾選Decrypt HTTPS traffic,裏面的兩個子菜單也一起勾選了

 

三、導出證書
1.點右上角Actions按鈕
2.選第二個選項,導出到桌面,此時桌面上會多一個文件:FiddlerRoot.cer,如圖。

四、導入到firefox瀏覽器
1.打開右上角瀏覽器設置》選項》高級》證書》查看證書》證書機構》導入

 

 2.勾選文件導入

 

3.打開文件後,會彈出個框,勾選三個選項就完成操作啦。

 

如果還不能成功,那就重啓瀏覽器,重啓電腦了。

1.2 證書導出失敗問題

前言
在點Actions時候出現Export Failed:The root certificate could not be located.最近有很多小夥伴在fiddler導出證書的時候,遇到無法導出的問題,收集了幾種解決辦法,供參考。
 
一、證書無法導出
1.在點Actions時候出現Export Failed:The root certificate could not be located.

 

 

二、無法導出問題解決方案
1.首先確保安裝的 Fiddler 是較新的版本,先關閉fiddler
2.下載並安裝Fiddler證書生成器

下載地址:http://www.telerik.com/docs/default-source/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2
3.點Tools>Fiddler Options
4.勾選Capture HTTPS traffic
5.點Actions按鈕,Export Root Certificate Desktop按鈕導出到桌面
 
三、刪除證書
1.有些小夥伴可能之前裝過一些fiddler證書,安裝的姿勢不對,導致新的證書不起作用,這時候需要先刪掉之前的證書了
方法一:從fiddler裏打開證書管理界面
方法二、從文件管理器輸入:certmgr.msc並回車

2.搜索之前安裝的fiddler證書,找到之後全部刪除
3.重新下載證書生成器:http://www.telerik.com/docs/default-source/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2
一路傻瓜式安裝,遇到警告什麼的直接忽略就行。
4.安裝好證書後,按照1.1章節Fiddler抓包1-抓firefox上https請求的瀏覽器導入證書就行了(弄好之後,重啓電腦就OK了)

1.3 只抓APP的請求

前言
fiddler在抓手機app的請求時候,通常也會抓到來自PC的請求,導致會話消息太多,那麼如何把來自pc的請求過濾掉,只抓來自APP的請求呢?
必備環境:
1.電腦上已裝fiddler
2.手機和電腦在同一局域網
 
一、設置
1.fiddler>Tools>Fiddler Options>Connections 勾選Allow remote computers to connect。

2.記住這裏的端口號:8888,後面會用到。

 

二、查看電腦IP
1.打開cmd,輸入:ipconfig,記住這個IPv4地址。

>>ipconfig

 

三、設置代理

1.手機設置->WLAN設置->選擇該wifi,點右邊的箭頭(有的手機是長按彈出選項框)。

 

 

2.選擇修改網絡配置:
配置主機名:與主機電腦IP地址保持一致
端口號:8888
3.保存後就可以抓到來自手機的請求了。

 

四、抓APP上的HTTPS請求

1.如果app都是http請求,是不需要安裝證書,能直接抓到的,如果是https請求,這時候手機就需要下載證書了。
2.打開手機瀏覽器輸入:http://10.224.xx.xx:8888 ,這個中間的host地址就是前面查到的本機地址。
3.出現如下畫面,點箭頭所指的位置,點擊安裝就可以了。

 

五、設置過濾
1.手機上設置代理後,這時候fiddler上抓到的是pc和app所有的請求,如果pc上打開網址,會很多,這時候就需要開啓過濾功能了。
2.打開fiddler>Tools>Fiddler Options>HTTPS>...from remote clients only,勾選這個選項就可以了
...from all processes :抓所有的請求
...from browsers only :只抓瀏覽器的請求
...from non-browsers only :只抓非瀏覽器的請求
...from remote clients only:只抓遠程客戶端請求

 

(注意:如果手機設置代理後,測完之後記得恢復原樣,要不然手機無法正常上網。)

1.4 查看get與post請求

前言
前面兩篇關於Fiddler抓包的一些基本配置,配置完之後就可以抓到我們想要的數據了,接下來就是如何去分析這些數據。
本篇以博客園的請求爲例,簡單分析get與post數據有何不一樣,以後也能分辨出哪些是get,哪些是post了。
 
一、get請求
1.打開fiddler工具,然後瀏覽器輸入博客首頁地址:http://www.cnblogs.com/yoyoketang/

2.點開右側Inspectors下的Headers區域,查看Request Headers

3.Request Headers區域裏面的就是請求頭信息,可以看到打開博客園首頁的是get請求

二、post請求

1.打開登錄首頁:https://passport.cnblogs.com/user/signin
2.輸入賬號和密碼登錄成功後,查看fiddler抓包的請求頭信息,可以看出是post請求

 

三、如何找出需要的請求
1.打開fiddler後,左邊會話框區域刷刷刷的很多請求,那麼如何有效的找出自己需要的請求呢?
2.首先第一步:清屏(cls),在左下角命令行輸入cls,清空屏幕
(清屏也可以使用快捷鍵Ctrl+X)

3.第二步在瀏覽器輸入url地址的時候,記住這個地址,如打開博客首頁:http://www.cnblogs.com/yoyoketang/
在點擊登錄按鈕的時候,不要做多餘的操作了,然後查看fiddler會話框,這時候有好幾個請求。

4.如上圖,紅色框框這個地方就是host地址,紅色圈圈地方就是url的路徑(yoyoketang),也就是博客首頁的地址了,那這個請求就是博客首頁的請求了。
 
四、get和post請求參數區別
1.關於get和post的功能上區別就不說了,大家自己查資料,這裏主要從fiddler抓包的層面查看請求參數上的區別
2.get請求的Raw參數查看,主要分三部分:
--第1部分是請求url地址
--第2部分是host地址
--第3部分是請求頭部信息header

 

 

3.再查看博客登錄請求的Raw信息,post的信息分四部分。
--前面3塊內容都一樣,第3部分和第4部分中間會空一行
--第4部分內容就是post請求的請求body(get請求是沒body的)

1.5 工具介紹(request和response)

前言
本篇簡單的介紹下fiddler界面的幾塊區域,以及各自區域到底是幹什麼用的,以便於更好的掌握這個工具
 
一、工具簡介
1.第一塊區域是設置菜單,這個前面3篇都有介紹
2.第二塊區域是一些快捷菜單,可以點下快捷功能鍵
3.第三塊左邊是抓捕的請求會話列表,每一個請求就是一個會話
4.第四塊右邊上方區域是request請求的詳細信息,可以查看Headers、Cookies、Raw、JSON等

5.第五塊右邊下方區域就是response信息,可以查看服務端返回的json數據或其它信息
6.第六塊區域左下角黑色的那塊小地方,雖然很不起眼,容易被忽略掉,這地方是命令行模式,可以輸入簡單的指令如:cls,執行清屏的作用等

 

 

 

二、會話框
1.會話框主要查看請求的一些請求的一些基本信息,如# 、result、protocol、host、url、body、 caching、content-type、process

 

2、#:會話框列表最左側,#號這一欄是代表這個請求大概是什麼內容,<>這個符號就是我們一般要測試的請求與響應的類型。

3.result:這裏是服務器返回的代碼,如
--200,請求ok;2xx一般是服務器接受成功了並處理
--3xx,重定向相關
--4xx,404最常見的的就是找不到服務器,一般是請求地址有問題
--5xx,這個一般是服務器本身的錯誤
4.protocol:這個是協議類型,如http、https
5.host:主機地址或域名
6.url:請求的路徑
7.body:該條請求產生的數據大小
8.caching:緩存相關

9.content-type:連接類型

10.process:客戶端類型

三、Request 和Response
1.Request是客戶端發出去的數據,Response是服務端返回過來的數據,這兩塊區域功能差不多

2.headers:請求頭,這裏包含client、cookies、transport等
3.webfroms:請求參數信息表格展示,更直觀。可以直接該區域的參數
4.Auth:授權相關,如果顯示如下兩行,說明不需要授權,可以不用關注
(這個目前很少見了)
No Proxy-Authorization Header is present.
No Authorization Header is present.
5.cookies:查看cookie詳情
6.raw:查看一個完整請求的內容,可以直接複製
7.json:查看json數據
8.xml:查看xml文件的信息

四、decode解碼
1.如果response的TextView區域出現亂碼情況,可以直接點下方黃色區域解碼

 

2.也可以選中上方快捷菜單decode,這樣後面的請求都會自動解碼了

1.6 接口測試(Composer)

前言
Fiddler最大的優勢在於抓包,我們大部分使用的功能也在抓包的功能上,fiddler做接口測試也是非常方便的。
對應沒有接口測試文檔的時候,可以直接抓完包後,copy請求參數,修改下就可以了。
 
一、Composer簡介
點開右側Composer區域,可以看到如下界面,就是測試接口的界面了

 

 

1.請求方式:點開可以勾選請求協議是get、post等
2.url地址欄:輸入請求的url地址
3.請求頭:第三塊區域可以輸入請求頭信息

4.請求body:post請求在此區域輸入body信息
5.執行:Execute按鈕點擊後就可以執行請求了
6.http版本:可以勾選http版本
7.請求歷史:執行完成後會在右側History區域生成歷史記錄
 
二、模擬get請求
1.在Composer區域地址欄輸入博客首頁:http://www.cnblogs.com/yoyoketang/
2.選擇get請求,點Execute執行,請求就可以發送成功啦
3.請求發送成功後,左邊會話框會生成一個會話記錄,可以查看抓包詳情
4.右側history區域會多一個歷史請求記錄

 

5.會話框選中該記錄,查看測試結果:
--選中該會話,點開Inspectors
--response區域點開Raw區域

--Raw查看的是HTML源碼的數據
--也可以點WebView,查看返回的web頁面數據

 

三、Json數據
1.有些post的請求參數和返回參數是Json格式的,如博客園的登錄請求:https://passport.cnblogs.com/user/signin
2.在登錄頁面手動輸入賬號和密碼,登錄成功。
3.找到這個登錄成功的會話,查看json數據如下圖:

 

四、模擬post請求
1.請求類型勾選post
2.url地址欄輸入對應的請求地址
3.body區域寫登錄的json參數,json參數直接copy上一步抓包的數據,如下圖紅色區域

4.header請求頭區域,可以把前面登錄成功後的頭部抓包的數據copy過來
(注意,有些請求如果請求頭爲空的話,會請求失敗的)

 

 

5.執行成功後查看測試結果:

--執行成功如第三所示的圖,顯示success=True
--執行失敗如下圖所示,顯示
message=Invalid length for a Base-64 char array or string.
success=False

 

1.7 get請求(url詳解)

前言
上一篇介紹了Composer的功能,可以模擬get和post請求,get請求有些是不帶參數的,這種比較容易,直接放到url地址欄就行。有些get請求會帶有參數,本篇詳細介紹url地址格式。
 
一、url詳解
1.url就是我們平常打開百度在地址欄輸入的:https://www.baidu.com,如下圖,這個是最簡單的url地址,打開的是百度的主頁

 

2.再看一個稍微複雜一點的url,在百度輸入框輸入:上海悠悠博客園

 

3.查看url地址欄,對比之前的百度首頁url地址,後面多了很多參數。當然最主要的參數是:wd=上海悠悠博客園(後面的一大串可以暫時忽略)。
4.那麼問題來了,這些參數有什麼作用呢?
可以做個簡單的對比,在地址欄分別輸入:

https://www.baidu.com
https://www.baidu.com/s?wd=上海悠悠博客園
對比打開的頁面有什麼不一樣,現在知道作用了吧,也就是說這個多的"/s?wd=上海悠悠博客園"就是搜索的結果頁面
 
二、url解析
1.以"https://www.baidu.com/s?wd=上海悠悠博客園"這個url請求的抓包爲例

2.那麼一個完整的url地址,基本格式如下:
https://host:port/path?xxx=aaa&ooo=bbb
--http/https:這個是協議類型,如圖中所示

--host:服務器的IP地址或者域名,如圖中2所示
--port:HTTP服務器的默認端口是80,這種情況下端口號可以省略。
如果使用了別的端口,必須指明,例如:192.168.3.111:8080,這裏的8080就是端口
--path:訪問資源的路徑,如圖中3所示/s (圖中3是把path和請求參數放一起了)
--?:url裏面的?這個符號是個分割線,用來區分問號前面的是path,問號後面的是參數
--url-params:問號後面的是請求參數,格式:xxx=aaa,如圖4區域就是請求參數
--&:多個參數用&符號連接
 
三、請求參數(params)

1.在url裏面請求參數一般叫params,但是我們在fiddler抓包工具看到的參數是:QueryString
2.QueryString是像服務端提交的參數,其實跟params是一個意思,每個參數對應的都有name和value值
3.多個參數情況如下:

四、UrlEncode編碼
1.如果url地址的參數帶有中文的,一般在url裏面會是這樣的,如第二點裏的wd=%E4%B8%8A%E6%B5%B7%E6%...
像看到%E4這種編碼的就是經過url編碼過的,需要解碼就能看到是什麼中文了
2.用urlencode在線編碼/解碼工具,地址:http://tool.chinaz.com/tools/urlencode.aspx

 

1.8 post請求(body)

前言上一篇講過get請求的參數都在url裏,post的請求相對於get請求多了個body部分,本篇就詳細講解下body部分參數的幾種形式。
注意:post請求的參數可以放在url,也可以放在body,也可以同時放在url和body,當然post請求也可以不帶參數。
只是一般來說,post請求的參數習慣放到body部分
 
一、body數據類型
常見的post提交數據類型有四種:
1.第一種:application/json:這是最常見的json格式,也是非常友好的深受小夥伴喜歡的一種,如下

{"input1":"xxx","input2":"ooo","remember":false}
 
2.第二種:application/x-www-form-urlencoded:瀏覽器的原生 form 表單,如果不設置 enctype 屬性,那麼最終就會以 application/x-www-form-urlencoded 方式提交數

input1=xxx&input2=ooo&remember=false
 
3.第三種:multipart/form-data:這一種是表單格式的,數據類型如下:

------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="text"title------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="file"; filename="chrome.png" Content-Type: image/png PNG ... content of chrome.png ...------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

 

4.第四種:text/xml:這種直接傳的xml格式

<!--?xml version="1.0"?-->
<methodcall>
<methodname>examples.getStateName</methodname>
<params>
<param>
<value><i4>41</i4></value>
</params>
</methodcall>

二、json格式
1.打開博客園的登錄頁面,輸入賬號密碼後抓包,查看post提交數據,點開Raw查看整個請求的原始數據

 

2.前面講過post的請求多一個body部分,上圖紅色區域就是博客園登錄接口的body部分,很明顯這種格式是前面講到的第一種json格式

3.查看json格式的樹狀結構,更友好,可以點開JSON菜單項

 

4.查看這裏的json數據,很明顯傳了三個參數:
--input1:這個是登錄的賬號參數(加密過)
--input2:這個是登錄的密碼參數(加密過)

--remember:這個是登錄頁面的勾選是否記住密碼的選項,False是不記住,True是記住
 
三、x-www-form-urlencoded
1.登錄博客園後,打開新隨筆,隨便寫一個標題和一個正文後保存,抓包數據如下

 

2.如上圖的這種格式,很明顯就屬於第二種了,這種類型的數據查看,在WebFrom裏面查看了

 

3.上面紅色框框的Query String是url裏面的參數,下面紅色框框的body部分就是這次post提交的body參數部分了。

 
四、WebFrom
1.爲什麼登錄請求的WebFrom的body部分爲空呢?

 

 

2.看上圖紅色框框的顯示:這裏只支持application/x-www-form-urlencoded這種格式的body參數,也就是說json格式的,需要在JOSN這一欄查看了。

 
五、xml
1.如果遇到text/xml這種格式的body,那就如下圖這樣的了

1.9 打斷點(bpu)

前言
先給大家講一則小故事,在我們很小的時候是沒有手機的,那時候跟女神聊天都靠小紙條。某屌絲A男對隔壁小王的隔壁女神C傾慕已久,於是天天小紙條騷擾,無奈中間隔着一個小王,這樣小王就負責傳小紙條了。有一天小王忍不住偷偷打開A男表白的紙條,把裏面內容改了下,改成了:我的同桌小王喜歡你。最後女神C和小王走在了一起。。。這是一個悲傷的故事!
 
一、斷點
1.爲什麼要打斷點呢?
比如一個購買的金額輸入框,輸入框前端做了限制100-1000,那麼我們測試的時候,需要測試小於100的情況下。很顯然前端只能輸入大於100的。這是我們可以先抓到接口,修改請求參數,繞過前端,傳一個小於100的數,檢查服務端的功能是否OK。

也就是說接口測試其實是不需要管前端的,主要測後端的功能。Fiddler作爲代理服務器的作用其實就相當於上面故事裏面的小王,傳紙條的作用,Fiddler(小王)修改了請求參數(小紙條),是爲了驗證服務端功能(女神C)。
2.Fiddler可以修改以下請求
--Fiddler設置斷點,可以修改HTTP請求頭信息,如修改Cookie,User-Agent等
--可以修改請求數據,突破錶單限制,提交任意數字,如充值最大100,可以修改成10000
--攔截響應數據,修改響應體,如修改服務端返回的頁面數據
 
二、斷點的兩種方式

1.before response:這個是打在request請求的時候,未到達服務器之前
--屌絲A傳給小王的時候,小王在這個時候攔截了小紙條,未傳給女神C

 

2.after response:也就是服務器響應之後,在Fiddler將響應傳回給客戶端之前。
--女神C回了小紙條,小王拿到後攔截了,未傳給屌絲A

 

三、全局斷點
1.全局斷點就是中斷fiddler捕獲的所有請求,先設置下,點擊rules-> automatic breakpoint  ->before requests

 

2.選中before requests選項後,打開博客園首頁:http://www.cnblogs.com/yoyoketang/,看到如下T的標識,說明斷點成功

 

3.打完斷點後,會發現所有的請求都無法發出去了,這時候,點下Go按鈕,就能走下一步了

 

4.找到需要修改的請求後,選中該條會話,右側打開WebFroms,這時候裏面的參數都是可以修改的了

 

5.修改之後點Run to Completion就能提交了,於是就成功修改了請求參數了
6.打全局斷點的話,是無法正常上網的,需要清除斷點:rules-> automatic breakpoint  ->disabled
 
四、單個斷點

已經知道了某個接口的請求地址,這時候只需要針對這一條請求打斷點調試,在命令行中輸入指令就可以了
 
請求前斷點(before response): bpu
 
1. 論壇登錄接口:https://passport.cnblogs.com/user/signin
 
2. 命令行輸入:bpu https://passport.cnblogs.com/user/signin 回車

 

 3.請求登錄接口的時候,就會只攔截登錄這個接口了,此時可以修改任意請求參數

 4.取消斷點,在命令行輸入: bpu 回車就可以了
 
 
響應後斷點(after  requests): bpafter
 
1. 論壇登錄接口:https://passport.cnblogs.com/user/signin
 
2. 在命令行輸入:bpafter https://passport.cnblogs.com/user/signin  回車

 

3.登錄博客園,會發現已經攔截到登錄後服務器返回的數據了,此時可以修改任意返回數據
 
4.取消斷點,在命令行輸入: bpafter 回車就可以了
 
 
 
五、攔截來自某個網站所有請求
 
1.在命令行輸入:bpu www.cnblogs.com

2.打開博客園任意網頁,發現都被攔截到了
 
3.打開博客園其他網站,其它網站可以正常請求
 
4.說明只攔截了來自部落論壇(www.cnblogs.com)的請求
 
5.清除輸入bpu回車即可

 

 六、命令行其它相關指令
 
Bpafter, Bps, bpv, bpm, bpu
 
這幾個命令主要用於批量設置斷點
 
Bpafter xxx: 中斷  URL  包含指定字符的全部  session  響應
 
Bps xxx: 中斷 HTTP 響應狀態爲指定字符的全部 session 響應
 
Bpv xxx: 中斷指定請求方式的全部  session  響應

Bpm xxx: 中斷指定請求方式的全部  session  響應 、、同於 bpv xxx
 
Bpu xxx:與bpafter類似
 
當這些命令沒有加參數時,會清空所有設置了斷點的HTTP請求。
 
更多的其他命令可以參考Fiddler官網手冊
 
(贈言:打斷點僅供測試需要,勿走歪門邪道!!!)

 

1.10 會話保存

前言
爲什麼要保存會話呢?舉個很簡單的場景,你在上海測試某個功能接口的時候,發現了一個BUG,而開發這個接口的開發人員是北京的一家合作公司。
你這時候給對方開發提bug,如何顯得專業一點,能讓對方心服口服的接受這個BUG呢?如果只是截圖的話,不是很方便,因爲要截好幾個地方還描述不清楚,不如簡單粗暴一點把整個會話保存起來,發給對方。
 
一、保存爲文本
1.以博客園登錄爲例,抓到登錄的請求會話
2.點左上角File>Save>Selected Sessions>as Text,保存到電腦上就是文本格式的

 

 

3.文本格式的可以直接打開,結果如下圖

 

二、幾種保存方式
1.save-All Sessions :保存所有的會話,saz文件
2.save-Selected Session:保存選中的會話

--in ArchiveZIP :保存爲saz文件
--as Text :以txt文件形式保存整個會話包括Request和Response
--as Text (Headers only) :僅保存頭部
3.Request:保存請求
--Entir Request:保存整個請求信息(headers和body)
--Request Body:只保存請求body部分
4.Response:保存返回
--Entir Response:保存整個返回信息(headers和body)
--Response Body:只保存返回body部分
--and Open as Local File:保存Response信息,並打開文件

三、亂碼問題(decode)
1.打開博客園首頁:http://www.cnblogs.com/yoyoketang/,保存之後查看,會發現返回的是亂碼

 

2.遇到這種情況,主要是需要解碼,用前面學到的decode方法

 

3.點擊箭頭區域後,重新保存就沒亂碼了。
4.還有一個最簡單辦法就是選中上圖會話框上的decode按鈕,這樣就自動解碼了。

四、保存與導入全部會話
1.我們可以打開fiddler,操作完博客園後,選中save>All Sessions,保存全部會話
2.保存後,在fiddler打開也很方便,直接把剛纔保存的會話按住拽進來就可以了

 

3.也可以選擇File>Load Archive導入這個文件

 

五、Repaly
1.導入請求後,可以選中某個請求,點擊Repaly按鈕,重新發請求

2.也可以ctrl+a全部選中後,點Repaly按鈕,一次性批量請求

 

 

這裏保存會話和replay功能其實就是相當於錄製和回放了

1.11 自定義會話框

前言
在使用fiddler抓包的時候,查看請求類型get和post每次只有點開該請求,在Inspectors才能查看get和post請求,不太方便。於是可以在會話框直接添加請求方式。
 
一、添加會話框菜單
1.點會話框菜單(箭頭位置),右鍵彈出選項菜單

 

2.選擇Customize columns選項,Collection選項選擇Miscellaneous

 

3.Field Name選擇:RequestMethod

4.點Add按鈕即可添加成功

 

二、隱藏會話菜單
1.選擇需要隱藏的菜單,右鍵。選擇Hide this column

 

 2.隱藏後也可以讓隱藏的菜單顯示出來:Ensure all columns are visble

 

三、調整會話框菜單順序
1.如果需要調整會話框菜單順序,如:Content-Type菜單按住後往前移動,就能調整了

 

四、會話排序
1.點擊會話框上的菜單,就能對會話列表排序了,如點body菜單

 

2.點完後上面有個上箭頭(正序),或者下箭頭(倒敘)。但是不能取消,取消的話關掉fiddler後重新打開就行了。

 

1.12 http協議簡介


一、什麼是http
1.HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。
2.HTTP(HyperText Transfer Protocol)協議是基於TCP的應用層協議,它不關心數據傳輸的細節,主要是用來規定客戶端和服務端的數據傳輸格式,最初是用來向客戶端傳輸HTML頁面的內容。默認端口是80
3.http(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議

 

 

二、請求報文
1.HTTP請求報文主要由請求行、請求頭部、空一行、請求正文4部分組成
(當然,如果不算空的一行,那就是3個部分)

 

2.下圖是fiddler工具抓的post請求報文(工具使用看fiddler篇),可以對照上圖,更清楚的理解http的請求報文內容。

 

 

三、響應報文
1.HTTP響應報文主要由狀態行、消息報頭、空一行、響應正文4部分組成

(當然,如果不算空的一行,那就是3個部分)

 


2.下圖就是一個請求的響應內容,用fiddler抓包工具可以查看

 

四、完整的http內容
1.一個完整的http協議其實就兩塊內容,一個是發的請求,一個服務端給的響應。
2.以下是請求https://github.com/timeline.json 這個地址後,用fiddler抓包導出爲文本,查看完整的http請求內容。(具體操作查看《fiddler  1.10會話保存》)

 

3.內容如下:

(----------------以下是請求報文---------------------)
GET https://github.com/timeline.json HTTP/1.1
Host: github.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: xxx(已省略)


(----------------以下是請求報文---------------------)
GET https://github.com/timeline.json HTTP/1.1
Host: github.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: xxx(已省略)
X-Request-Id: d09e199dc290c6f0dc79fe49007069ab
X-Runtime: 0.004161
Content-Security-Policy: xxx(已省略)
Strict-Transport-Security: xxx(已省略)
X-Content-Type-Options: nosniff
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Runtime-rack: 0.007388
X-GitHub-Request-Id: FE36:2B0A9:177175F:23C092D:594FD998
Content-Length: 379


(----------------以下是響應正文(json格式)---------------------)

{"message":"Hello there, wayfaring stranger. If you’re reading this then you probably didn’t see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.","documentation_url":"https://developer.github.com/v3/activity/events/#list-public-events"}

1.13 請求行

一、8種請求方法
    1.請求行有三個主要參數:請求方法、url、協議版本。

 

2.請求方法包含:


1) get
請求指定的頁面信息,並返回實體主體。

2) post
向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
3) HEAD
類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 
4) OPTIONS
返回服務器針對特定資源所支持的HTTP請求方法,也可以利用向web服務器發送‘*’的請求來測試服務器的功能性
5) PUT
向指定資源位置上傳其最新內容
6) DELETE

請求服務器刪除Request-URL所標識的資源

7) TRACE
回顯服務器收到的請求,主要用於測試或診斷
8) CONNECT
HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。
 
注意:
1)方法名稱是區分大小寫的。
2)最常見的的就是通常說的get和post方法。
二、url詳解

 

1.打開百度,在搜索框輸入任意文字,搜索後,複製地址欄的url地址:
https://www.baidu.com/s?wd=%E4%B8%8A%E6%B5%B7%E6%82%A0%E6%82%A0%E5%8D%9A%E5%AE%A2&rsv_spt=1&rsv_iqid=0x91baaabd00070ba2&issp=1&f=8&rsv_bp=1&rsv_idx=2
2.那麼一個完整的url地址,基本格式如下:
https://host:port/path?xxx=aaa&ooo=bbb
--http/https:這個是協議類型,如圖中1所示

--host:服務器的IP地址或者域名,如圖中2所示
--port:HTTP服務器的默認端口是80,這種情況下端口號可以省略。
如果使用了別的端口,必須指明,例如:192.168.3.111:8080,這裏的8080就是端口
--path:訪問資源的路徑,如圖中3所示/s (圖中3是把path和請求參數放一起了)
--?:url裏面的?這個符號是個分割線,用來區分問號前面的是path,問號後面的是參數
--url-params:問號後面的是請求參數,格式:xxx=aaa,如圖4區域就是請求參數
--&:多個參數用&符號連接
三、協議版本
根據HTTP標準,HTTP請求可以使用多種請求方法。

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章