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