本次教程涉及到的軟件包括:
- Chrome瀏覽器
- Chrome的插件Postman
- Python的Request
假設(shè)你已經(jīng)熟悉使用一切,我們直接告訴你結(jié)果:
- Python的Request
所有的請(qǐng)求信息在代碼本身舶治,不會(huì)調(diào)用到瀏覽器的Cookie信息稽物,如果請(qǐng)求中需要驗(yàn)證Cookie需要添加到Hearders中 - Chrome的插件Postman
每次請(qǐng)求可能會(huì)調(diào)用瀏覽器保存的Cookie搅窿,所以如果想分析Request請(qǐng)求需要攜帶什么Cookie,需要先刪除瀏覽器的Cookie
如果看不懂結(jié)論,可以接下來(lái)的照步驟來(lái)學(xué)習(xí)分析登刺,主要包含幾個(gè)要點(diǎn):
- 如何清除瀏覽器的Cookie
- Postman快速獲Chrome取瀏覽器產(chǎn)生的請(qǐng)求
- Postman分析Headers中需要驗(yàn)證的內(nèi)容(Cookie只是其中之一)
- Postman導(dǎo)出Request代碼
- Selenium獲取cookie的方法
清理瀏覽器Cookie
Chrome打開某個(gè)網(wǎng)站后你會(huì)看到左上角有一個(gè)小鎖乾翔,點(diǎn)擊后刪除所有Cookie信息爱葵,如下面的GIF所示:
F12開發(fā)者模式獲取瀏覽器的請(qǐng)求信息
在訪問(wèn)某個(gè)網(wǎng)站過(guò)程中,會(huì)附帶很多請(qǐng)求反浓,包括js钧惧、ajax、api接口的請(qǐng)求等
要點(diǎn):
- 注意勾選Preserve log勾习,不然每次頁(yè)面刷新浓瞪,記錄會(huì)被刪除
- 可以嘗試使用Filter那個(gè)框的功能,在Preserve log的最左邊附近
首次登陸和非首次登陸的分析
基本了解刪除Cookie和F12開發(fā)者模式后巧婶,我們來(lái)分析下首次登陸和第二次登陸的區(qū)別
按刪除步驟刪除Cookies后乾颁,關(guān)閉瀏覽器涂乌,再目標(biāo)網(wǎng)站觀察下:
要點(diǎn):
- 小鎖中的Cookie信息又恢復(fù)了(圖中有19個(gè),具體怎么來(lái)有興趣自己可以分析下)
- Request請(qǐng)求中沒(méi)有Cookie信息英岭,Response回應(yīng)中右Set-cookie的信息
- 出現(xiàn)了選擇一個(gè)城市(這個(gè)信息是記錄再Cookie中的)
再次提醒:勾選Preserve log后湾盒,再次訪問(wèn)目標(biāo)網(wǎng)站,通過(guò)filter過(guò)濾需要的信息
要點(diǎn)(對(duì)比兩次請(qǐng)求的區(qū)別):
- 第一次:Request沒(méi)有cookie诅妹,Response中有Set-cookies
- 第二次:Request有cookie罚勾,Response沒(méi)有Set-cookies
結(jié)論:我們首次訪問(wèn)網(wǎng)站,網(wǎng)站會(huì)發(fā)一個(gè)set-cookie的回應(yīng)吭狡,讓我們第二次訪問(wèn)的時(shí)候帶上身份信息去請(qǐng)求目標(biāo)網(wǎng)站尖殃,往往很多時(shí)候我們的想要的數(shù)據(jù)不在目標(biāo)網(wǎng)站的首頁(yè),可能是一個(gè)API接口的請(qǐng)求划煮,可能是目標(biāo)網(wǎng)站的某個(gè)子目錄送丰,雖然訪問(wèn)首頁(yè)會(huì)帶一個(gè)set-cookie的回應(yīng)給你,但是非首頁(yè)的請(qǐng)求就沒(méi)有那么友善了弛秋,給你的可能是一個(gè)空回應(yīng)甚至把你的請(qǐng)求拒之門外(往下看會(huì)有分析)
Postman快速獲Chrome取瀏覽器產(chǎn)生的請(qǐng)求
這個(gè)功能是為了快速獲取我們的請(qǐng)求(包括Headers和Cookies)器躏,不需要手動(dòng)到Postman去添,首先我們看看功能按鍵在哪里蟹略,然后將它們開啟(如果不知道軟件在哪里安裝自己Google一下就可以了)登失。
要點(diǎn):
- 圖中標(biāo)識(shí)的兩個(gè)位置記得設(shè)置為on
- 如果記錄太多影響分析,刪除下歷史記錄
瀏覽器直接訪問(wèn)目標(biāo)網(wǎng)站挖炬,你會(huì)看到所有的請(qǐng)求都會(huì)出現(xiàn)到History的標(biāo)簽中壁畸,通過(guò)篩選按鈕獲取你想要的請(qǐng)求,為了更好分析上面所說(shuō)的攔截問(wèn)題茅茂,我拿了一個(gè)API接口的請(qǐng)求作為本次分析的目標(biāo)捏萍。
這個(gè)鏈接是我多次分析目標(biāo)網(wǎng)站后,發(fā)現(xiàn)每次搜索python工作崗位時(shí)候空闲,瀏覽器向服務(wù)器發(fā)送的一個(gè)請(qǐng)求令杈,Response回應(yīng)中的是崗位的詳細(xì)信息(Json格式)。如圖:
要點(diǎn):
- 使用過(guò)濾獲取到自己想要的網(wǎng)址
Postman分析Headers中需要驗(yàn)證的內(nèi)容
接下來(lái)正式開始碴倾,我做一個(gè)大膽的測(cè)試逗噩,刪掉所有的Headers,看看請(qǐng)求的結(jié)果
要點(diǎn):
- 你要相信你的眼睛跌榔,沒(méi)錯(cuò)結(jié)果還是請(qǐng)求成功了
當(dāng)你在懊惱為什么的時(shí)候异雁,我又要來(lái)一個(gè)Gif了
循環(huán)播放的,簡(jiǎn)單說(shuō)下Gif操作步驟和預(yù)期結(jié)果:
- 直接訪問(wèn)發(fā)送API請(qǐng)求(成功返回?cái)?shù)據(jù))
- 刪除瀏覽器中記錄的Cookies僧须,再次發(fā)送發(fā)送API請(qǐng)求(沒(méi)有數(shù)據(jù)纲刀,或者是攔截網(wǎng)站)
- 復(fù)制URL到瀏覽器中,查看結(jié)果(攔截網(wǎng)站)
仔細(xì)看担平,仔細(xì)看~~~
總結(jié):哈哈示绊,其實(shí)就是一個(gè)簡(jiǎn)單的道理Postman會(huì)使用瀏覽器記錄的Cookie锭部,所以在每次測(cè)試的時(shí)候(包括Postman請(qǐng)求成功以后也會(huì)存到瀏覽器中),先刪除掉瀏覽器的Cookie再做測(cè)試面褐。
另外拌禾,針對(duì)目標(biāo)網(wǎng)站我分析結(jié)果是:多個(gè)網(wǎng)站的分析后,我只會(huì)保留User-Agent和Cookie這兩個(gè)Headers展哭,最后Cookie驗(yàn)證只需user_trace_token=20170511230425-b1fa946e4c77442498aac65a98153141(授人以魚不如授人以漁湃窍,過(guò)程不詳解,自己去嘗試吧)
Postman導(dǎo)出Request代碼
步驟:
- Send按鈕下面的那個(gè)Code
- 選中Python Requests
- 復(fù)制代碼到IDLE中就能使用(前提是分析到對(duì)的Headers)
Selenium獲取cookie的方法
最后付上一段selenum獲取cookie的方法匪傍,詳細(xì)Selenium的使用這里不介紹了~~~
import requests
from selenium import webdriver
driver = webdriver.Chrome() # 指定使用的Webderiver您市,這里使用的是Chrome的
driver.get("https://www.lagou.com") # 目標(biāo)網(wǎng)址
# 獲得cookie信息
# print driver.get_cookies()
# print type(driver.get_cookies())
cookie_tag = driver.get_cookies()[3]["value"] # 這里的代碼可能有問(wèn)題,自己改一下
driver.close() # 關(guān)閉瀏覽器
print cookie_tag
url = "https://www.lagou.com/jobs/positionAjax.json"
querystring = {"city": "廣州", "needAddtionalResult": "false", "kd": "python", "pn": "{0}".format(1)}
headers = {
'user-agent': "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0",
'cookie': "user_trace_token={0};".format(cookie_tag)
}
response = requests.request("GET", url, headers=headers, params=querystring)
print response.text
代碼分析:
- webdriver.Chrome():此處需要下載一個(gè)Chrome的webdriver
- get_cookies() :獲取到所有的cookies析恢,然后按需提取(代碼中的提取可能有問(wèn)題)
以上都是我的跟人觀點(diǎn)秧饮,如果有不對(duì)映挂,或者有更好的方法,歡迎留言指正~~~