目錄
1. HTTP和HTTPS
HTTP: 一種發布和接受HTML頁面方法,端口號為80
HTTPS: HTTP的安全版,在HTTP上加入了SSL層,端口號為443
SSL: 用於Web的安全傳輸協議,在傳輸層對網絡連接進行加密,保障在Internet上數據傳輸的安全
網絡爬蟲可以理解為模擬瀏覽器操作的過程
瀏覽器的主要功能是向服務器發送請求,在瀏覽器窗口展示您選擇的網絡資源,HTTP是一套計算機通過網絡進行通信的規則
1.1. HTTP的請求和響應流程:打開一個網頁的過程
主要流程
1.2. URL
基本格式: scheme://host[:port]/path/.../[?query-string][#anchor]
scheme
:協議, http,httpshost
: 服務器的IP地址或者域名port#
: 服務器的端口(如果是協議默認端口,缺省端口為80)path
: 訪問資源的路徑query-string
: 參數,發送給http服務器的數據anchor
: 錨(跳轉到網頁的而制定錨點位置)
例如:
2. 客戶端HTTP請求
URL只是標識資源的位置,而HTTP是用來提交和獲取資源. 客戶端發送一個HTTP請求到服務器請求消息,包括如下格式
請求行、請求頭部、空行、請求數據
- 請求行
由請求方法字段、URL字段和HTTP協議版本字段組成,通過空格分隔,例如:GET /index.html HTTP/1.1
HTTP協議的請求方法主要有GET,POST
方法
1) GET:從服務器獲取數據
定義: 最常見的一種請求方式,當客戶端要從服務器中讀取文檔時,當點擊網頁上的鏈接或者通過在瀏覽器的地址欄輸入網址來瀏覽網頁的,使用的都是GET方式
GET請求參數顯示,都顯示在瀏覽器網址上,HTTP服務器根據該請求所包含的URL參數來闡述響應內容,即GET請求的參數是URL的一部分: http://www.baidu.com/s?wd=Chinese
"Get" 請求的參數 是URL的一部分
2) POST:向服務器傳送數據
POST請求參數在請求體中,消息長度沒有限制且以隱式的方式進行發送,通過用來向HTTP服務器提交數據(上傳文件等),請求的參數放在Content-Type
消息頭中,指明該消息的媒體類型和編碼
"POST"請求的參數 不在URL中,而在請求體中。
3. Fiddler抓包工具的使用
Fiddler是一款強大Web調試工具,它能記錄所有客戶端和服務器的HTTP請求。 Fiddler啟動的時候,默認IE的代理設為了127.0.0.1:8888,而其他瀏覽器是需要手動設置。
3.1. 工作原理
Fiddler 是以代理web服務器的形式工作的,它使用代理地址:127.0.0.1,端口:8888
3.2. Fiddler抓取HTTPS設置
-
首先需要在官網上下載Fiddler安裝程序:https://www.telerik.com/fiddler
-
啟動Fiddler,打開菜單欄中的 Tools > Telerik Fiddler Options,打開“Fiddler Options”對話框。
- 對Fidder進行設置
- 打開工具欄->Tools->Fiddler Options->HTTPS,
- 選中Capture HTTPS CONNECTs (捕捉HTTPS連接),
- 選中Decrypt HTTPS traffic(解密HTTPS通信)
- 另外我們要用Fiddler獲取本機所有進程的HTTPS請求,所以中間的下拉菜單中選中...from all processes (從所有進程)
- 選中下方Ignore server certificate errors(忽略服務器證書錯誤)
- Fiddler 主菜單 Tools -> Fiddler Options…-> Connections
- 重啟Fidder
3.3. Fiddler抓取Chorme的對話
使用chorme的SwitchOmega插件 + 搭配使用SwitchOmega和Fiddler抓取數據
3.4. Fidder界面介紹
設置好后,本機HTTP通信都會經過127.0.0.1:8888代理,也就會被Fiddler攔截到。
請求 (Request) 部分詳解
- Headers —— 顯示客戶端發送到服務器的 HTTP 請求的 header,顯示為一個分級視圖,包含了 Web 客戶端信息、Cookie、傳輸狀態等。
- Textview —— 顯示 POST 請求的 body 部分為文本。
- WebForms —— 顯示請求的 GET 參數 和 POST body 內容。
- HexView —— 用十六進制數據顯示請求。
- Auth —— 顯示響應 header 中的 Proxy-Authorization(代理身份驗證) 和 Authorization(授權) 信息.
- Raw —— 將整個請求顯示為純文本。
- JSON - 顯示JSON格式文件。
- XML —— 如果請求的 body 是 XML 格式,就是用分級的 XML 樹來顯示它。
響應 (Response) 部分詳解
- Transformer —— 顯示響應的編碼信息。
- Headers —— 用分級視圖顯示響應的 header。
- TextView —— 使用文本顯示相應的 body。
- ImageVies —— 如果請求是圖片資源,顯示響應的圖片。
- HexView —— 用十六進制數據顯示響應。
- WebView —— 響應在 Web 瀏覽器中的預覽效果。
- Auth —— 顯示響應 header 中的 Proxy-Authorization(代理身份驗證) 和 Authorization(授權) 信息。
- Caching —— 顯示此請求的緩存信息。
- Privacy —— 顯示此請求的私密 (P3P) 信息。
- Raw —— 將整個響應顯示為純文本。
- JSON - 顯示JSON格式文件。
- XML —— 如果響應的 body 是 XML 格式,就是用分級的 XML 樹來顯示它 。
3.5. 實例:捕捉訪問百度時候的請求和響應
請求頭(www.baidu.com)
# 1. 請求行:請求方法+URL+協議號
GET https://www.baidu.com/ HTTP/1.1
# 2. 請求頭補:
Host: www.baidu.com
Connection: keep-alive # 常鏈接,不關閉長期保存
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1 # 升級一個不安全的請求: HTTP->HTTPS
# 瀏覽器客戶端的一個版本信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
# 可以接收的文本的類型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
# 客戶端可以做的編碼操作
Accept-Encoding: gzip, deflate, br
# 客戶端支持的語言 + 權重
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,en-CA;q=0.6
# Cookie值:保存在本地瀏覽器的文本文件,記錄當前在網絡中的狀態-》比如記錄賬戶密碼自動登錄
Cookie: BAIDUID=4F583A04A0193EBE0C9849C551B9305C:FG=1; BIDUPSID=4F583A04A0193EBE0C9849C551B9305C; PSTM=1545978093; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=1440_21082_28205_28132_27751_27245_27509; H_PS_645EC=4f9b6%2FduIgSKPevnFeBA8pfSrBrfEA3Hy4jDyjs%2FTHh5IbfnjsLRKgH25MM; delPer=0; BD_CK_SAM=1; PSINO=7; BD_HOME=0
x-hd-token: rent-your-own-vps
響應的內容(www.baidu.com)
這跟我們右擊游覽器查看源代碼出來的代碼是一摸一樣的
4. 其他內容
4.1 Cookie和Session
Cookie
: 通過客戶端記錄的信息確定用戶的身份
Session
: 通過服務器記錄的信息確定用戶的身份