Requests 是用Python語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,能夠節約咱們大量的工做,徹底知足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語爲中心開發的,因此它比 urllib 更加 Pythoner。更重要的一點是它支持 Python3 哦!php
1.經過pip安裝 pip install Requestshtml
2.使用IDE安裝好比 pycharmpython
先來一個簡單的例子吧!讓你瞭解下其威力:json
1 # r = requests.get(url='http://www.itwhy.org') #最基本的get請求 2 # print r.status_code #返回狀態 3 # r= requests.get(url='http://www.baidu.com/',params={'wd':'python'}) #帶參數的get請求 4 # print r.url 5 # print r.text #d打印解碼後的返回數據
HTTP不只get這麼簡單,其餘的方式也是一句話哦cookie
1 get = requests.get('http://httpbin.org') #get請求 2 post = requests.post('https://httpbin.org/post') #post請求 3 put = requests.put('http://httpbin.org/put') #put請求 4 delete = requests.delete('http://httpbin.org/delete') #delete 請求 5 head = requests.head('http://httpbin.org/get') #head請求 6 options = requests.options('http://httpbin.org/get') #option 請求
已上的HTTP方法,對於WEB系統通常只支持GET 和post 有一些還支持HEAD方法。數據結構
1 #帶參數的請求實例 2 3 requests.get('http://www.dict.baidu.com/s',params={'wd':'python'}) 4 requests.post('http://www.itwhy.org/wp-comments-post.php',data = {'comment':'測試post'})
post傳送數據的幾種方法post
若是咱們要發送複雜的表單,就須要POST數據了。和GET傳送數據同樣,想方法中額外添加一個data參數的事兒。這種方式至關於你在表單中填寫這些數據,而後點擊表單的提交。測試
1.提交表單數據url
1 data = { 2 'name':'yitian', 3 'age':22, 4 'friends':['zhang3','li4'] #建立一個data表單數據 5 } 6 response = requests.post('{base_url}post',data=data) #傳入一個字典data
2.提交字符串數據spa
有時候POST數據不是使用表單方式,而是直接在請求體中附加參數。那麼咱們在發送參數的時候不能向data參數添加字典了,而應該傳遞字符串。
1 response = requests.post('{base_url}post',data=json.dumps(data)) #上面的例子就是將data字典數據轉成json數據結構
json.loads() : 將json結構轉變成Python數據結構
json.dumps():將Python數據結構轉變成json結構
json.load(): 讀取json文件轉成Python數據結構
json.dump():寫入json文件,讀取json文件而後轉成Python數據結構
3.直接提交JSON字符串看成總體傳送
有些程序(例如Github的API)須要將JSON字符串直接當作請求體發送,好比說上面這種將字典轉換爲JSON的例子。在這種狀況下,咱們能夠直接將字典的引用傳遞給方法的json參數,這樣就不須要咱們手動轉換,requests會自動轉換。
1 response = requests.post('{base_url}post',json=data)
4.上傳文件
在網頁上,上傳頭像等操做都須要上傳multipart/form-data類型的表單。使用requests也很是簡單。須要注意打開文件的時候最好使用二進制模式,使用文本模式打開文件可能致使requests不能正確計算文件的大小。
file = open(r'c:\Windows\System32\drivers\etc\hosts', mode='rb') #rb是以二進制讀取方式 data = { 'file': file } response = requests.post(f'{base_url}post', files=data) print(response.text)
requests 支持流式上傳的,容許發送大的數據流或文件而無需先把他讀入內存。需使用流式上傳
1 with open('massive-body') as f: 2 requests.post('http://some.url/streamed',data=f)
cookie 操做
若是要獲取響應的cookies,調用cookies屬性便可,它會返回一個對象,它實現了標準庫的http.cookiejar。因此咱們能夠按照cookiejar的
方法來使用。好比說訪問百度的時候,它會分配一個cookie,因此咱們可使用下面的代碼獲取Cookie。
RequestsCookieJarRequestsCookieJar
1 cookies = requests.cookies.RequestsCookieJar() 2 cookies.set('name','yitian') 3 response = requests.get('{base_urlcookies',cookies=cookies) 4 print response.text