Python Requests 小技巧總結

關於 Python Requests ,在使用中,總結了一些小技巧把,分享下。python


1:保持請求之間的Cookies,咱們能夠這樣作。git

import requests self.session = requests.Session() self.session.get(login_url) # 能夠保持登陸態

2:請求時,會加上headers,通常咱們會寫成這樣github

self.session.get(url, params, headers=headers)

惟一不便的是以後的代碼每次都須要這麼寫,代碼顯得臃腫,因此咱們能夠這樣:json

#在構造函數中,這樣設置是全局的。 # 設置請求頭 self.s = requests.Session() self.s.headers = {'balabala'} # 移除服務器驗證 self.s.verify = False # 設置代理 self.s.proxies={'aa'} # 若是後續headers有改變,再次賦值就能夠了。 self.s.get(url, params, headers=new_headers)

3:默認requests請求失敗後不會重試,可是咱們跑case時不免遇到一些網絡,服務重啓,外部緣由致使case失敗,咱們能夠在Session實例上附加HTTPAdapaters 參數,增長失敗重試次數。後端

request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3) self.session.mount('https://',request_retry) self.session.mount('http://',request_retry)

這樣,以後的請求,若失敗,重試3次。api


4:重定向 
網絡請求中可能會遇到重定向,咱們須要一次處理一個請求,能夠把重定向禁止。服務器

self.session.post(url,data,allow_redirects=False)

5: post請求提交json格式數據時(請求頭爲:{「Content-Type」: 「application/json」}),通常先要把python對象轉換成json對象。可能不少時候是這樣寫:cookie

self.session.post(url, data=json.dumps(data))。

其實post有一個默認參數json,能夠直接簡寫成:網絡

self.session.post(url, json=data)

6:寫接口請求,debug時,會須要看下代碼請求的詳細信息,固然咱們可使用fiddler來查看,其實咱們本身也能夠在代碼這樣獲取debug信息*session

import requests import logging import httplib as http_client http_client.HTTPConnection.debuglevel = 1 logging.basicConfig() logging.getLogger().setLevel(logging.DEBUG) requests_log = logging.getLogger("requests.packages.urllib3") requests_log.setLevel(logging.DEBUG) requests_log.propagate = True requests.get('https://www.baidu.com') #更好的方法是本身封裝一個裝飾器,就能夠爲任意請求函數添加一個debug功能。

7:使用grequests實現異步請求。

pip install grequests

import grequests urls = [ 'http://www.url1.com', 'http://www.url2.com', 'http://www.url3.com', 'http://www.url4.com', 'http://www.url5.com', 'http://www.url6.com', ] resp = (grequests.get(u) for u in urls) grequests.map(resp) # [<Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>]

8:發送自定義cookies 
咱們使用Session實例來保持請求之間的cookies,可是有些特殊狀況,須要使用自定義的cookies 
咱們能夠這樣

# 自定義cookies cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'} session.post('http://wikipedia.org', cookies=cookie) 

 

9:需求肯定先後端並行設計時,這時測試並無辦法調用接口,如何作接口測試呢?咱們可使用mock或者是httpretty

import requests import httpretty # 模擬返還的狀態碼 @httpretty.activate def test_beta1_access(): httpretty.register_uri(httpretty.GET, "http://beta.com/", body="here is the mocked body", status=201) response = requests.get('http://beta.com') expect(response.status_code).to.equal(201) # 模擬返還response的body @httpretty.activate def test_some_api(): httpretty.register_uri(httpretty.GET, "http://beta.com/", body='{"success": false}', content_type='text/json') response = requests.get('http://beta.com/') expect(response.json()).to.equal({'success': False})

詳細使用能夠查看API_DOC


10:統計一個API請求花費的時間,咱們可使用以下方法

self.session.get(url).elapsed

11:設置請求超時

self.session.get(url, timeout=15) # timeout 僅對鏈接過程有效,與響應體的下載無關。 # timeout 並非整個下載響應的時間限制,而是若是服務器在15 秒內沒有應答,將會引起一個異常(更精確地說,是在 timeout 秒內沒有從基礎套接字上接收到任何字節的數據時)

關於Python ,requests的小技巧,就是這些。

相關文章
相關標籤/搜索