Python之Request庫踩坑之路

此文作者是剛?cè)胧諴ython,用來平時(shí)研究自動(dòng)化測試弧可,所以對Request理解有限嘁字,如有疑問可以聯(lián)系討論。

背景

Requests 繼承了urllib2的所有特性掸掸。Requests支持HTTP連接保持和連接池论皆,支持使用cookie保持會話,支持文件上傳猾漫,支持自動(dòng)確定響應(yīng)內(nèi)容的編碼点晴,支持國際化的 URL 和 POST 數(shù)據(jù)自動(dòng)編碼。

安裝

利用pip安裝:
$ pip install requests

使用

GET請求

1.基本的GET的請求

response = requests.get("http://www.baidu.com/")
#也可以這樣寫
response = requests.request("get","http://www.baidu.com/")

2.添加headers 和 params

如果想添加 headers悯周,可以傳入headers參數(shù)來增加請求頭中的headers信息粒督。如果要將參數(shù)放在url中傳遞,可以利用 params 參數(shù)禽翼。

key = {'key': 'CC'}
headers = {
    "User-Agent": "Mozilla/5.0"}
response = requests.get("http://www.baidu.com/s?", params=key, headers=headers)
print(response.text)# 查看響應(yīng)內(nèi)容屠橄,response.text 返回的是Unicode格式的數(shù)據(jù)
print(response.content)# 查看響應(yīng)內(nèi)容族跛,response.content返回的字節(jié)流數(shù)據(jù)
print(response.status_code)# 查看響應(yīng)碼

如果你想取文本,可以通過response.text锐墙;如果想取圖片/文件礁哄,則可以使用response.content。

POST方法

1.基本的POST的請求

response = requests.post("http://www.baidu.com/",data = data)

2.body帶參數(shù)

formdata = {
    "type": "AUTO",
    "doctype": "json",
    "key": "www",
    "ue": "UTF-8",
}
url = "http://auto-installment/v1/loan-credit-check"
response = requests.post(url,data = data,headers=headers)

print(response.text)#顯示返回結(jié)果
print(response.json())# 如果是json文件可以直接顯示

注意:
打印的結(jié)果出現(xiàn)中文亂碼溪北,使用json.dupms(response, ensure_ascii=False))解決

Session

一般利用Session在跨請求的時(shí)候保持某些參數(shù)桐绒,比如實(shí)現(xiàn)登錄后才能訪問其他頁面

# 1. 創(chuàng)建session對象,可以保存Cookie值
session = requests.session()

# 2. 需要登錄的用戶名和密碼
data = {"username": "mxxxx", "password": "1233444"}

# 3. 發(fā)送附帶用戶名和密碼的請求之拨,并獲取登錄后的Cookie值茉继,保存在ssion里
session.post("http://www.reibang.com/sign_in", data=data)

# 4. ssion包含用戶登錄后的Cookie值,可以直接訪問那些登錄后才可以訪問的頁面
response = session.get("http://www.reibang.com/writer#/")

踩坑記要

1.在使用requests去請求一個(gè)接口時(shí)蚀乔,出現(xiàn)報(bào)錯(cuò)的情況烁竭,但是這個(gè)接口本身卻沒有問題。這是因?yàn)榻涌诘恼埱髤?shù)有兩種情況:簡單類型(一般少于3個(gè))和復(fù)雜對象類型吉挣。
解決方法:在headers中定義一下這兩種參數(shù)的類型
簡單類型:headers={"Content-Type": "application/x-www-form-urlencoded"}
復(fù)雜對象類型:headers={"Content-Type":application/json}
2.某些HTTPS請求存在 SSL證書驗(yàn)證
解決方法:response = requests.get("https://www.baidu.com/", verify=False)

擴(kuò)展

1.requests請求失敗后派撕,增加重試機(jī)制(若失敗,將會重試3次)

request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)
session.mount('https://',request_retry)  

2.使用grequests實(shí)現(xiàn)異步請求

urls = [
    'http://www.url1.com',
    'http://www.url2.com',
    'http://www.url3.com',
    'http://www.url4.com',
    'http://www.url5.com',
]
resp = (grequests.get(u) for u in urls)
grequests.map(resp)

3.自定義cookies

我們使用Session實(shí)例來保持請求之間的cookies睬魂,但是有些特殊情況终吼,需要使用自定義的cookies

我們使用Session實(shí)例來保持請求之間的cookies,但是有些特殊情況汉买,需要使用自定義的cookies
# 自定義cookies
cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}

session.post('http://', cookies=cookie)

4.統(tǒng)計(jì)一個(gè)API請求花費(fèi)的時(shí)間

session.get(url).elapsed.total_seconds() 

5.設(shè)置請求超時(shí)

session.get(url, timeout=15)

6.文件上傳

Requests利用files作為參數(shù)模擬提交文件數(shù)據(jù)

file = {'file':open('test.bmp','rb')}   #rb表示用二進(jìn)制格式打開指定目錄下的文件,且用于只讀
r =requests.post('http://',files=file)
print(r.text)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末佩脊,一起剝皮案震驚了整個(gè)濱河市蛙粘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌威彰,老刑警劉巖出牧,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異歇盼,居然都是意外死亡舔痕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進(jìn)店門豹缀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伯复,“玉大人,你說我怎么就攤上這事邢笙⌒ト纾” “怎么了?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵氮惯,是天一觀的道長叮雳。 經(jīng)常有香客問我想暗,道長,這世上最難降的妖魔是什么帘不? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任说莫,我火速辦了婚禮,結(jié)果婚禮上寞焙,老公的妹妹穿的比我還像新娘储狭。我一直安慰自己,他們只是感情好棺弊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布晶密。 她就那樣靜靜地躺著,像睡著了一般模她。 火紅的嫁衣襯著肌膚如雪稻艰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天侈净,我揣著相機(jī)與錄音尊勿,去河邊找鬼。 笑死畜侦,一個(gè)胖子當(dāng)著我的面吹牛元扔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旋膳,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼澎语,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了验懊?” 一聲冷哼從身側(cè)響起擅羞,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎义图,沒想到半個(gè)月后减俏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碱工,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年娃承,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怕篷。...
    茶點(diǎn)故事閱讀 38,563評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡历筝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出廊谓,到底是詐尸還是另有隱情漫谷,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布蹂析,位于F島的核電站舔示,受9級特大地震影響碟婆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惕稻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一竖共、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧俺祠,春花似錦公给、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蔫缸,卻和暖如春腿准,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拾碌。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工吐葱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人校翔。 一個(gè)月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓弟跑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親防症。 傳聞我的和親對象是個(gè)殘疾皇子孟辑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Requests快速上手 迫不及待了嗎?本頁內(nèi)容為如何入門 Requests 提供了很好的指引蔫敲。其假設(shè)你已經(jīng)安裝了...
    小娟_bb93閱讀 1,464評論 0 3
  • 上一篇:8.Urllib庫基本使用下一篇:10.正則表達(dá)式基礎(chǔ) requests是python實(shí)現(xiàn)的最簡單易用的H...
    在努力中閱讀 3,335評論 2 11
  • Getting Started Burp Suite 是用于攻擊web 應(yīng)用程序的集成平臺饲嗽。它包含了許多工具,并為...
    Eva_chenx閱讀 28,650評論 0 14
  • 使用func 來聲明一個(gè)函數(shù)燕偶,使用名字和參數(shù)來調(diào)用函數(shù)喝噪。使用->來指定函數(shù)返回值的類型 func greet(na...
    陌上北辰閱讀 215評論 0 0
  • 談到這個(gè)問題础嫡,先簡單了解泌尿系統(tǒng)過程指么,尿液是人體津液所化,在腎的氣化作用下生成尿液榴鼎,下輸于膀胱伯诬,膀胱是屬于腎系統(tǒng)的...
    XS金戈閱讀 592評論 1 0