為什么要先學fiddler?
學習接口測試必學http協議,如果直接先講協議,我估計小伙伴們更懵,為了更好的理解協議,先從抓包開始。
結合抓包工具講http協議更容易學一些。
抓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.打開文件后,會彈出個框,勾選三個選項就完成操作啦。
如果還不能成功,那就重啟瀏覽器,重啟電腦了。
證書導出失敗問題
前言
在點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了)
只抓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:只抓遠程客戶端請求
(注意:如果手機設置代理后,測完之后記得恢復原樣,要不然手機無法正常上網。)
查看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的)
工具介紹(request和response)
前言
本篇簡單的介紹下fiddler界面的幾塊區域,以及各自區域到底是干什么用的,以便於更好的掌握這個工具
工具簡介
- 第一塊區域是設置菜單,這個前面3篇都有介紹
- 第二塊區域是一些快捷菜單,可以點下快捷功能鍵
- 第三塊左邊是抓捕的請求會話列表,每一個請求就是一個會話
- 第四塊右邊上方區域是request請求的詳細信息,可以查看Headers、Cookies、Raw、JSON等
- 第五塊右邊下方區域就是response信息,可以查看服務端返回的json數據或其它信息
- 第六塊區域左下角黑色的那塊小地方,雖然很不起眼,容易被忽略掉,這地方是命令行模式,可以輸入簡單的指令如: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 Headeris present.
5.cookies:查看cookie詳情
6.raw:查看一個完整請求的內容,可以直接復制
7.json:查看json數據
8.xml:查看xml文件的信息
decode解碼
1.如果response的TextView區域出現亂碼情況,可以直接點下方黃色區域解碼
2.也可以選中上方快捷菜單decode,這樣后面的請求都會自動解碼了
接口測試(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
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
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}
- 1
2.第二種:application/x-www-form-urlencoded:瀏覽器的原生 form 表單,如果不設置 enctype 屬性,那么最終就會以 application/x-www-form-urlencoded 方式提交數
input1=xxx&input2=ooo&remember=false
- 1
3.第三種:multipart/form-data:這一種是表單格式的,數據類型如下:
WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data;
name=”file”;
filename=”chrome.png”
Content-Type: image/png PNG
content of chrome.png
WebKitFormBoundaryrGKCBY7qhFd3TrwA
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4.第四種:text/xml:這種直接傳的xml格式
<!--?xml version="1.0"?--> <methodcall> <methodname>examples.getStateName</methodname> <params> <param> <value><i4>41</i4></value> </param> </params> </methodcall>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
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這一欄查看了。
打斷點(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
- 論壇登錄接口:https://passport.cnblogs.com/user/signin
- 命令行輸入:bpu https://passport.cnblogs.com/user/signin 回車
- 請求登錄接口的時候,就會只攔截登錄這個接口了,此時可以修改任意請求參數
- 取消斷點,在命令行輸入: bpu 回車就可以了
響應后斷點(after requests): bpafter
-
在命令行輸入:bpafter https://passport.cnblogs.com/user/signin 回車
-
登錄博客園,會發現已經攔截到登錄后服務器返回的數據了,此時可以修改任意返回數據
-
取消斷點,在命令行輸入: 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官網手冊
(贈言:打斷點僅供測試需要,勿走歪門邪道!!!)
會話保存
前言
為什么要保存會話呢?舉個很簡單的場景,你在上海測試某個功能接口的時候,發現了一個BUG,而開發這個接口的開發人員是北京的一家合作公司。
你這時候給對方開發提bug,如何顯得專業一點,能讓對方心服口服的接受這個BUG呢?如果只是截圖的話,不是很方便,因為要截好幾個地方還描述不清楚,不如簡單粗暴一點把整個會話保存起來,發給對方。
一、保存為文本
- 以博客園登錄為例,抓到登錄的請求會話
- 點左上角File>Save>Selected Sessions>as Text,保存到電腦上就是文本格式的
- 文本格式的可以直接打開,結果如下圖
幾種保存方式
- save-All Sessions :保存所有的會話,saz文件
- save-Selected Session:保存選中的會話
- in ArchiveZIP :保存為saz文件
- as Text :以txt文件形式保存整個會話包括Request和Response
- as Text (Headers only) :僅保存頭部
- Request:保存請求
- Entir Request:保存整個請求信息(headers和body)
- Request Body:只保存請求body部分
- Response:保存返回
- Entir Response:保存整個返回信息(headers和body)
- Response Body:只保存返回body部分
- and Open as Local File:保存Response信息,並打開文件
亂碼問題(decode)
- 遇到這種情況,主要是需要解碼,用前面學到的decode方法
3. 點擊箭頭區域后,重新保存就沒亂碼了。
4. 還有一個最簡單辦法就是選中上圖會話框上的decode按鈕,這樣就自動解碼了。
保存與導入全部會話
- 我們可以打開fiddler,操作完博客園后,選中save>All Sessions,保存全部會話
- 保存后,在fiddler打開也很方便,直接把剛才保存的會話按住拽進來就可以了
3. 也可以選擇File>Load Archive導入這個文件
Repaly
- 導入請求后,可以選中某個請求,點擊Repaly按鈕,重新發請求
- 也可以ctrl+a全部選中后,點Repaly按鈕,一次性批量請求
這里保存會話和replay功能其實就是相當於錄制和回放了
自定義會話框
前言
在使用fiddler抓包的時候,查看請求類型get和post每次只有點開該請求,在Inspectors才能查看get和post請求,不太方便。於是可以在會話框直接添加請求方式。
添加會話框菜單
- 點會話框菜單(箭頭位置),右鍵彈出選項菜單
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后重新打開就行了。
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會話保存》)
- 內容如下:
以下是請求報文
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(已省略)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
以下是請求報文
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
以下是響應正文(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
請求行
8種請求方法
1.請求行有三個主要參數:請求方法、url、協議版本。
請求方法包含:
請求方式 | 簡介 |
---|---|
get | 請求指定的頁面信息,並返回實體主體。 |
post | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。 |
HEAD | 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
OPTIONS | 返回服務器針對特定資源所支持的HTTP請求方法,也可以利用向web服務器發送‘*’的請求來測試服務器的功能性 |
PUT | 向指定資源位置上傳其最新內容 |
DELETE | 請求服務器刪除Request-URL所標識的資源 |
TRACE | 回顯服務器收到的請求,主要用於測試或診斷 |
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
- 1
2.那么一個完整的url地址,基本格式如下:
https://host:port/path?xxx=aaa&ooo=bbb
- 1
- 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 方法。