10.Python-第三方庫requests詳解(二)

Requests 是用Python語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,能夠節約咱們大量的工做,徹底知足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語爲中心開發的,因此它比 urllib 更加 Pythoner。更重要的一點是它支持 Python3 哦!php

  • Beautiful is better than ugly.(美麗優於醜陋)
  • Explicit is better than implicit.(清楚優於含糊)
  • Simple is better than complex.(簡單優於複雜)
  • Complex is better than complicated.(複雜優於繁瑣)
  • Readability counts.(重要的是可讀性)

1、安裝 Requests

1.經過pip安裝 pip install Requestshtml

2.使用IDE安裝好比 pycharmpython

2、發送請求get與傳遞post參數

先來一個簡單的例子吧!讓你瞭解下其威力: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
相關文章
相關標籤/搜索