Python網(wǎng)絡(luò)請(qǐng)求模塊requests
背景介紹
之前說(shuō)了,公司有一個(gè)需求需要使用python實(shí)現(xiàn)。由于公司服務(wù)器上的python版本是2.7我在寫這個(gè)需求時(shí),用到網(wǎng)絡(luò)請(qǐng)求這部分時(shí),
發(fā)現(xiàn)python 2.7版本的請(qǐng)求模塊真的是設(shè)計(jì)很不合理,urllib和urllib2兩個(gè)包,我弄的云里霧里的,索性我就不適用自帶內(nèi)建函數(shù),
尋找第三方函數(shù)庫(kù)了,發(fā)現(xiàn)requests這個(gè)函數(shù)庫(kù)非常的便捷(http for humans).直接使用pip install requests命令即可安裝。
requests quick start
發(fā)送請(qǐng)求
def function():
# 發(fā)送get請(qǐng)求獲得一個(gè)response對(duì)象(我們可以從響應(yīng)對(duì)象獲得我們想要的一切數(shù)據(jù))
res = requests.get("https://api.github.com/events")
# 發(fā)送post請(qǐng)求
res = requests.post("http:///post",data={"key":"value", ...})
# 發(fā)送put請(qǐng)求
res = requests.put("http:///put",data={"key":"value", ...})
# 發(fā)送delete請(qǐng)求
res = requests.delete("http:///delete")
res = requests.head("http:///get")
res = requests.options("http:///get")
pass
//你沒(méi)看錯(cuò)就是那么簡(jiǎn)單,非常符合正常人的思維很簡(jiǎn)便
//再次強(qiáng)調(diào)我們能夠從response對(duì)象中獲得我們想要的一切數(shù)據(jù)信息
構(gòu)造請(qǐng)求參數(shù)發(fā)送請(qǐng)求
get請(qǐng)求參數(shù)構(gòu)造
def function():
# 請(qǐng)求參數(shù)
payload = {'key1': 'value1', 'key2': 'value2'}
res = requests.get("http:///get",params=payload)# 注意是params參數(shù)
# requests 會(huì)自動(dòng)幫我們拼接請(qǐng)求地址
# url= http:///get?key1=value1&key2=value2
//針對(duì)get請(qǐng)求使用的即使params參數(shù),post請(qǐng)求使用的是data參數(shù)
post form表單請(qǐng)求參數(shù)構(gòu)造
def function():
# form表單要提交的數(shù)據(jù)
payload = {'key1': 'value1', 'key2': 'value2'}
res = requests.post("http:///post",data=payload)# 注意是data參數(shù)
post json對(duì)象請(qǐng)求提交參數(shù)
def function():
# post 提交json對(duì)象數(shù)據(jù)
payload = {'key1': 'value1', 'key2': 'value2'}
res = requests.post("http:///post",data=json.dumps(payload))# 第一種方式
res = requests.post("http:///post",json=payload)# 第二種方式
構(gòu)造請(qǐng)求頭headers
def function():
# 構(gòu)造請(qǐng)求頭,請(qǐng)求頭也是字典格式
headers = {'user-agent': 'my-app/0.0.1'}
url = "https://api.github.com/some/endpoint"
res = requests.get(url,headers=headers)
構(gòu)造cookies請(qǐng)求
def function():
# 構(gòu)造cookies
cookies = dict(sessionId='Jsession3123131')
url = "http:///cookies"
requests.get(url,cookies=cookies)
//比如有些應(yīng)用可能需要攜帶某些cookie才能驗(yàn)證授權(quán),那么此時(shí)就很有用了
構(gòu)造請(qǐng)求超時(shí)設(shè)置
def function():
# 設(shè)置請(qǐng)求超時(shí)時(shí)間
requests.get('http://github.com', timeout=0.01) # 0.01秒沒(méi)響應(yīng)就請(qǐng)求超時(shí)失敗
Response響應(yīng)內(nèi)容
content = res.content(原始二進(jìn)制數(shù)據(jù))
# 大部分情況使用這個(gè)方法
text = res.text(文本數(shù)據(jù)信息,requests自動(dòng)幫我們以指定編碼解析出來(lái)的內(nèi)容)
# 響應(yīng)json數(shù)據(jù)信息,通常我們使用json模塊來(lái)處理
json_data = res.json()
# 響應(yīng)狀態(tài)碼
status_code=res.status_code
# 響應(yīng)頭
headers = res.headers
# 響應(yīng)cookies
cookies = res.cookies
總結(jié)
一句話requests函數(shù)庫(kù)非常的簡(jiǎn)便 for humans,做網(wǎng)絡(luò)爬蟲時(shí)也可以使用該庫(kù)函數(shù)。高級(jí)部分請(qǐng)參考,官方高級(jí)應(yīng)用參考。
參考
1、http://docs./en/latest/user/quickstart/
2、http://docs./en/latest/user/advanced/#advanced
3、http://docs./en/latest/
|