基礎(chǔ)篇Python發(fā)送Get請(qǐng)求之如何放請(qǐng)求頭、參數(shù)、獲取返回內(nèi)容
目錄
- 一、Python 命名規(guī)范
- 二、發(fā)送 get 請(qǐng)求
- 1.安裝 requests
- 2.發(fā)送 get 請(qǐng)求
- 3.如何判斷發(fā)送 get 請(qǐng)求要不要傳請(qǐng)求頭部?
- 4.傳入請(qǐng)求頭
- 5.權(quán)限被拒:403 - Forbidden: Access is denied
- 三、response 的返回內(nèi)容還有其它更多信息
一、Python 命名規(guī)范
- 1.是英文字符、下劃線__、數(shù)字三個(gè)組成。
- 2.項(xiàng)目(工程)名稱、文件包名、模塊名稱等是英文開(kāi)頭,不能純數(shù)字,下劃線開(kāi)頭的有特殊含義,不能亂用。
- 3.腳本的名稱不能跟系統(tǒng)的模塊或第三方模塊重復(fù),例如requests/unittest/selenium等。
- 4.函數(shù)、類、方法、參數(shù)的名稱不能和系統(tǒng)現(xiàn)有的名稱重復(fù)。
- 5.類名稱必須大寫字母開(kāi)頭。除了類名稱,其它地方都用小寫開(kāi)頭。命名規(guī)范最好遵守駝峰法和下劃線法,例如:qingHan、qing_han
- 6.不要用中文、特殊字符(:;@等),有些特殊字符是有特殊作用的。
二、發(fā)送 get 請(qǐng)求
1.安裝 requests
cmd 中安裝 requests:
安裝:pip install requests
卸載:pip uninstall requests
查看:pip list
切記安裝的時(shí)候把抓包工具關(guān)了。
如果安裝報(bào)錯(cuò) timeout,因?yàn)闆](méi) fq,可以這樣裝:
- pip install -i http://mirrors.aliyun.com/pypi/simple/ requests
附上國(guó)內(nèi)常見(jiàn)的鏡像源
- 阿里云 http://mirrors.aliyun.com/pypi/simple/
- 中國(guó)科技大學(xué) https://pypi.mirrors.ustc.edu.cn/simple/
- 豆瓣(douban) http://pypi.douban.com/simple/
- 清華大學(xué) https://pypi.tuna.tsinghua.edu.cn/simple/
- 中國(guó)科學(xué)技術(shù)大學(xué) http://pypi.mirrors.ustc.edu.cn/simple/
requests 官方文檔:https://requests.readthedocs.io/zh_CN/latest/
2.發(fā)送 get 請(qǐng)求
一個(gè)完整的 get 請(qǐng)求,應(yīng)該包括請(qǐng)求行(url)和請(qǐng)求頭(headers)、請(qǐng)求參數(shù)(params)。
- import requests
- # get請(qǐng)求:url+params請(qǐng)求參數(shù)
- url="http://v.juhe.cn/laohuangli/d"
- # params 建議參數(shù)單獨(dú)拿出來(lái),這樣寫
- p={"key":"abf91475fc19f66c2f1fe567edd75257",
- "date":"2014-09-11"}
- a=requests.get(url,params=p) #發(fā)請(qǐng)求
- print(a.status_code)#狀態(tài)碼
- print(a.text)#raw 文本內(nèi)容
- print(a.headers)#dict
- print(a.headers['Date'])#key
- print(a.cookies)#RequestsCookieJar
3.如何判斷發(fā)送 get 請(qǐng)求要不要傳請(qǐng)求頭部?
先在 fiddler 中去掉請(qǐng)求頭部,用這個(gè)接口發(fā)下請(qǐng)求試試,如果是正常返回 200 就可以不傳頭部,如果在工具中發(fā)送請(qǐng)求后,提示 403 - Forbidden: Access is denied,那么就需要傳頭部。
請(qǐng)求頭中那么多參數(shù),哪些參數(shù)需要呢?
在工具中把請(qǐng)求頭中的參數(shù)挨個(gè)刪掉試試,不行的話就要加上了。
這個(gè)是看開(kāi)發(fā)怎么實(shí)現(xiàn)的了,自己寫接口自動(dòng)化代碼的時(shí)候最好寫上請(qǐng)求頭,這樣規(guī)范一些。
4.傳入請(qǐng)求頭
頭部寫成字典格式,headers=headers,傳入請(qǐng)求頭。
有些響應(yīng)內(nèi)容是 gzip 壓縮的,text 只能打印文本內(nèi)容,用 content 是二進(jìn)制流。一般獲取返回值內(nèi)容,推薦用 content。
- import requests
- url="https://www.baidu.com"
- # 構(gòu)建請(qǐng)求頭
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36'
- }
- r=requests.get(url,headers=headers)
- print(r.status_code)
- print(r.text)# html亂碼
- print(r.content.decode("utf-8")) #decode解壓縮展示中文
5.權(quán)限被拒:403 - Forbidden: Access is denied
url 和請(qǐng)求參數(shù)都對(duì),卻沒(méi)權(quán)限??赡茉颍悍?wù)器識(shí)別到你是代碼請(qǐng)求的,防腳本機(jī)制。
解決辦法:需要身份驗(yàn)證,代碼中的請(qǐng)求頭部加上 cookies)。例如:
圖片來(lái)自網(wǎng)絡(luò)
三、response 的返回內(nèi)容還有其它更多信息
- a.status_code 響應(yīng)狀態(tài)碼。
- a.content 字節(jié)方式的響應(yīng)體,會(huì)自動(dòng)為你解碼 gzip 和 eflate 壓縮。
- a.headers 以字典對(duì)象存儲(chǔ)服務(wù)器響應(yīng)頭,但是這個(gè)字典比較特殊,字典鍵不區(qū)分大小寫,若鍵不存在則返回 None。
- a.json() Requests 中內(nèi)置的 JSON 解碼器 ,json 轉(zhuǎn)成 python 的字典了。
- a.url 獲取 url。
- a.encoding 編碼格式。
- a.cookies 獲取返回的 cookie。
- a.text字符串方式的響應(yīng)體,會(huì)自動(dòng)根據(jù)響應(yīng)頭部的字符編碼進(jìn)行解碼。
- a.raise_for_status() 失敗請(qǐng)求(非 200 響應(yīng))拋出異常。
注:本篇文章寫的是用代碼發(fā)送簡(jiǎn)單的 get 請(qǐng)求,我有自己整理筆記的習(xí)慣,雖然網(wǎng)上這類的教程很多,但是坑也很多,自己寫的自己看放心一些。不喜勿噴,如有需要,自行抱走,后續(xù)會(huì)更新深入一些的文章。
本文轉(zhuǎn)載自微信公眾號(hào)「清菡軟件測(cè)試」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系清菡軟件測(cè)試公眾號(hào)。