Requests是用Python語言編寫的基于urllib,采用Apache2 Licensed開源協(xié)議的HTTP庫拒迅。它比urllib庫更加方便沥寥。是一個(gè)簡單易用的HTTP庫。
安裝
pip3 install requests
各種請求方式
get方式(帶參數(shù))
<纫洌 方式一:
payload = {'key1':'value1','key2':'value2'}
# 注意字典里值為None的鍵都不會(huì)被添加到 URL 的查詢字符串里驱负。
r=requests.get("http://httpbin.org/get",params=payload,headers=dict,timeout = 1)
# 方式二:
r=requests.get("http://httpbin.org/get?name=hello&age=12)
post方式
r=requests.get("http://httpbin.org/get",data=payload,headers=dict)
文件上傳
files={'file':open('report.xls','rb')}
r=requests.post(url,files=files)
response對象
屬性:
response.status_code
response.content ?#獲取二進(jìn)制數(shù)據(jù)患雇,返回字節(jié)流跃脊,通常用在下載圖片/視頻中。
response.text ? ?#響應(yīng)內(nèi)容苛吱,字符串類型酪术,不需要decode
response.json() ?#對于返回的json數(shù)據(jù),可以調(diào)用該方法獲得json對象翠储,實(shí)際上是執(zhí)行了json.loads(response.text))
response.cookies ? #urllib中需要聲明cookiejar,handler,opener等
response.url
response.encoding
response.headers
狀態(tài)碼:可以用有含義的值來代替
r=requests.get("http://httpbin.org/get",data=payload,headers=dict)
if r.status_code == requests.codes.ok:? #if r.status_code == 200:
? ? print("successfully")
會(huì)話維持
前一次訪問獲得的cookie绘雁,被后一次的訪問使用。
通過session來完成
import requests
s ?= requests.Session()
s.get("https://httpbin.org/cookies/set/number/123456")? #訪問url援所,獲得響應(yīng)的cookie
response = s.get("https://httpbin.org/cookies")
證書認(rèn)證
對于https的網(wǎng)站庐舟,訪問時(shí),首先會(huì)對證書進(jìn)行驗(yàn)證
r = requests.get("https://www.12306.cn") ?#SSLError,因?yàn)?2306的證書非官方
可以通過指定verify參數(shù)來決定是否進(jìn)行證書認(rèn)證
r = requests.get("https://www.12306.cn",verify=False)
#但仍然有警告信息住拭,可以通過以下方法消除
from requests.packages import urllib3
urllib3.disable_warnings()
可以通過指定證書
r = requests.get("https://www.12306.cn",cert=(path))
認(rèn)證設(shè)置
有些網(wǎng)站在訪問時(shí)需要輸入用戶名和密碼挪略,可以通過auth參數(shù)來制定
r = requests.get(url,auth=('user','123')
代理設(shè)置
http/https代理
#如果代理有賬號密碼历帚,可以通過以下方式指定;沒有的話杠娱,可以去掉
proxies = {
? ? "http":"http://user:password@127.0.0.1:9743"
}
r = requests.get("www.baidu.com",proxies = proxies)
socks代理
pip3 install 'requests[socks]'
proxies = {
? ? "http":"socks5://127.0.0.1:9743"
}
r = requests.get("www.baidu.com",proxies = proxies)