Requests 是一個非常強大的 HTTP 請求庫,基於 urllib,使網絡請求變的非常簡潔
官方文檔
安裝
利用 pip
安裝
$ pip3 install requests
利用 easy_install
easy_install requests
初步嘗試
首先我們引入一個小例子來感受一下
import requests
r = requests.get("http://www.baidu.com", )
print(type(r))
print(r.status_code)
print(r.encoding)
# print(r.text) print(r.cookies)
print(r.headers["content-type"])
# print(r.json())
基本請求
requests
庫提供了http
所有的基本請求方式
例如
r = requests.get("http://httpbin.org/get")
r = requests.post("http://httpbin.org/post")
r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options("http://httpbin.org/get")
一句話搞定
基本GET請求
最基本的GET請求可以直接用get方法
r = requests.get("http://httpbin.org/get")
如果想要加參數,可以利用 params 參數
import requests
params = {"username": "mazy", "password":"xxxx"}
r = requests.get("http://httpbin.org/get", params=params)
print(r.url) # http://httpbin.org/get?username=mazy&password=xxxx
請求JSON文件,可以利用 json() 方法解析
r = requests.get("http://httpbin.org/get")
print(r.text)
print(r.json())
如果想添加 headers,可以傳 headers 參數
params = {"username": "mazy", "password":"xxxx"}
headers = {'content-type': 'application/json'}
r = requests.get("http://httpbin.org/get", params=params, headers=headers)
基本POST請求
對於 POST 請求來說,我們一般需要爲它增加一些參數。那麼最基本的傳參方法可以利用 data 這個參數
import requests
params = {"username": "mazy", "password":"xxxx"}
r = requests.post("http://httpbin.org/post", data=params)
print(r.url)
print(r.text)
有時候我們需要傳送的信息不是表單形式的,需要我們傳JSON格式的數據過去,所以我們可以用 json.dumps() 方法把表單數據序列化
import requests
import json
params = {"username": "mazy", "password":"xxxx"}
r = requests.post("http://httpbin.org/post", data=json.dumps(params))
print(r.url)
print(r.text)
如果想要上傳文件,那麼直接用 file 參數即可
新建一個 a.txt
的文件,內容寫上 Hello World!
import requests
url = 'http://httpbin.org/post' files = {"file": open("text.txt", "rb")}
r = requests.post(url, files=files)
print(r.text)
Cookies
用 cookies
變量來得到站點的 cookies
另外可以利用 cookies
變量來向服務器發送 cookies
信息
url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
print(r.text)
超時配置
可以利用 timeout
變量來配置最大請求時間
r = requests.get("http://httpbin.org/get", timeout=10)
會話對象
在以上的請求中,每次請求其實都相當於發起了一個新的請求。也就是相當於我們每個請求都用了不同的瀏覽器單獨打開的效果。也就是它並不是指的一個會話,即使請求的是同一個網址
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)
SSL證書驗證
現在隨處可見 https
開頭的網站,Requests
可以爲HTTPS
請求驗證SSL
證書,就像web瀏覽器一樣。要想檢查某個主機的SSL證書,你可以使用 verify
參數
現在 12306 證書不是無效的嘛,來測試一下
import requests
r = requests.get('https://kyfw.12306.cn/otn/', verify=True)
print(r.text)
報錯:
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
如果我們想跳過剛纔 12306 的證書驗證,把 verify
設置爲 False
即可
import requests
r = requests.get('https://kyfw.12306.cn/otn/', verify=False)
print(r.text)
在默認情況下 verify 是 True
,所以如果需要的話,需要手動設置下這個變量。
代理
如果需要使用代理,你可以通過爲任意請求方法提供 proxies
參數來配置單個請求
import requests
proxies = {"https" : "http://41.118.132.69:443"}
r = requests.post("http://httpbin.org/post", proxies=proxies)
print(r.text)
API
以上講解了 requests
中最常用的參數,如果需要用到更多,請參考官方文檔 API