關於Python ,requests的小技巧

2021-09-07 17:59:37 字數 3008 閱讀 9752

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

1:保持請求之間的cookies,我們可以這樣做。

import requests

self.session = requests.session()

self.session.get(login_url) # 可以保持登入態

2:請求時,會加上headers,一般我們會寫成這樣

self.session.get(url, params, headers=headers)
唯一不便的是之後的**每次都需要這麼寫,**顯得臃腫,所以我們可以這樣:

#在建構函式中,這樣設定是全域性的。

# 設定請求頭

self.s = requests.session()

self.s.headers =

# 移除伺服器驗證

self.s.verify = false # 設定** self.s.proxies= # 如果後續headers有改變,再次賦值就可以了。 self.s.get(url, params, headers=new_headers)

3:預設requests請求失敗後不會重試,但是我們跑case時難免遇到一些網路,服務重啟,外部原因導致case失敗,我們可以在session例項上附加httpadapaters 引數,增加失敗重試次數。

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

4:重定向 

網路請求中可能會遇到重定向,我們需要一次處理乙個請求,可以把重定向禁止。

self.session.post(url,data,allow_redirects=false)
self.session.post(url, data=json.dumps(data))。
其實post有乙個預設引數json,可以直接簡寫成:

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

6:寫介面請求,debug時,會需要看下**請求的詳細資訊,當然我們可以使用fiddler來檢視,其實我們自己也可以在**這樣獲取debug資訊*

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('') #更好的方法是自己封裝乙個裝飾器,就可以為任意請求函式新增乙個debug功能。

7:使用grequests實現非同步請求。

pip install grequests

import grequests

urls = [

'','',

'','', '', '', ] resp = (grequests.get(u) for u in urls) grequests.map(resp) # [, , , , , ]

8:傳送自定義cookies 

我們使用session例項來保持請求之間的cookies,但是有些特殊情況,需要使用自定義的cookies 

我們可以這樣

# 自定義cookies

cookie = session.post('', cookies=cookie)

9:需求確定前後端並行設計時,這時測試並沒有辦法呼叫介面,如何做介面測試呢?我們可以使用mock或者是httpretty

# 模擬返還的狀態碼

def test_beta1_access(): httpretty.register_uri(httpretty.get, "", body="here is the mocked body", status=201) response = requests.get('') expect(response.status_code).to.equal(201) # 模擬返還response的body @httpretty.activate def test_some_api(): httpretty.register_uri(httpretty.get, "", body='', content_type='text/json') response = requests.get('') expect(response.json()).to.equal()

詳細使用可以檢視api_doc

10:統計乙個api請求花費的時間,我們可以使用如下方法

self.session.get(url).elapsed
11:設定請求超時

self.session.get(url, timeout=15)

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

python request鍵值判斷

if request.request.has key 鍵值 httprequest物件的屬性 參考 表 h 1.httprequest物件的屬性 屬性 描述path 表示提交請求頁面完整位址的字串,不包括網域名稱,如 music bands the beatles method 表示提交請求使用的h...

python request模組學習

python request模組學習 安裝 使用 1 get 2 post 3 put 4 delete 5 head 6 options 為url傳遞引數 payload res requests.get params payload res.url u key2 value2 key1 valu...

python request模組學習

安裝 使用 1 get 2 post 3 put 4 delete 5 head 6 options payload res requests.get params payload res.url u key2 value2 key1 value 檢視響應內容 res requests.get re...