使用 Requests 發(fā)送網(wǎng)絡(luò)請(qǐng)求非常簡(jiǎn)單。
一開始要導(dǎo)入 Requests 模塊:
import requests
然后,嘗試獲取某個(gè)網(wǎng)頁
r = requests.get('https://github.com/timeline.json')
現(xiàn)在,我們有一個(gè)名為 r 的 Response 對(duì)象。我們可以從這個(gè)對(duì)象中獲取所有我們想要的信息。
Requests 簡(jiǎn)便的 API 意味著所有 HTTP 請(qǐng)求類型都是顯而易見的。例如,你可以這樣發(fā)送一個(gè) HTTP POST 請(qǐng)求:
r = requests.post("http://httpbin.org/post")
put delete head都相似
>>> 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")
服務(wù)器響應(yīng)內(nèi)容
import requests
r = requests.get('https://movie.douban.com/review/best')
r.text

Requests 會(huì)自動(dòng)解碼來自服務(wù)器的內(nèi)容。大多數(shù) unicode 字符集都能被無縫地解碼。
不需要像urlli.request模塊使用的時(shí)候 需要將utf-8轉(zhuǎn)碼 在requests 模塊中使用r.txt
自動(dòng)轉(zhuǎn)碼
定制請(qǐng)求頭
如果你想為請(qǐng)求添加 HTTP 頭部,只要簡(jiǎn)單地傳遞一個(gè) dict 給 headers 參數(shù)就可以了。
例如,在前一個(gè)示例中我們沒有指定 content-type:
url = 'https://movie.douban.com/review/best/'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
注意: 定制 header 的優(yōu)先級(jí)低于某些特定的信息源,例如:
如果在 .netrc 中設(shè)置了用戶認(rèn)證信息,使用 headers= 設(shè)置的授權(quán)就不會(huì)生效。而如果設(shè)置了 auth= 參數(shù),.netrc 的設(shè)置就無效了。
如果被重定向到別的主機(jī),授權(quán) header 就會(huì)被刪除。
代理授權(quán) header 會(huì)被 URL 中提供的代理身份覆蓋掉。
在我們能判斷內(nèi)容長(zhǎng)度的情況下,header 的 Content-Length 會(huì)被改寫。
更進(jìn)一步講,Requests 不會(huì)基于定制 header 的具體情況改變自己的行為。只不過在最后的請(qǐng)求中,所有的 header 信息都會(huì)被傳遞進(jìn)去。
注意: 所有的 header 值必須是 string、bytestring 或者 unicode。盡管傳遞 unicode header 也是允許的,但不建議這樣做。