解決requests庫中session.verify引數失效的問題

金木大大大發表於2023-11-16

在使用requests庫進行HTTP請求時,如果在環境變數中設定了'REQUESTS_CA_BUNDLE',並且在session物件中設定了verify引數為False,那麼API請求會使用環境變數中的值而不是session物件中的值。這是因為在requests庫中,當session物件中的verify引數被設定為False時,它會優先使用環境變數中的值。


這個問題的發起者(我)遇到了這個bug,它導致了API請求的安全性問題,因為本應該忽略證照驗證的請求也會受到環境變數的影響。


解決方案

要解決這個問題,可以在呼叫session物件之前,先將'REQUESTS_CA_BUNDLE'環境變數設定為None,然後再設定session物件的verify引數。這樣,API請求就會優先使用session物件中的值,而不是環境變數中的值。


以下是修改後的程式碼示例:


```python

import requests

import os


# 設定環境變數'REQUESTS_CA_BUNDLE'為None

os.environ['REQUESTS_CA_BUNDLE'] = None


# 建立session物件

session = requests.Session()


# 設定session物件的verify引數為False

session.verify = False


# 發起HTTP請求

response = session.request(method, url="/".join([self.base_url, url]), headers=headers, data=body, params=query)

```


在上述程式碼中,首先將'REQUESTS_CA_BUNDLE'環境變數設定為None,然後建立一個session物件,並將session物件的verify引數設定為False。這樣,無論環境變數中的值如何設定,API請求都會優先使用session物件中的值,從而解決了該問題。


透過這種方式,我們可以確保在需要忽略證照驗證的情況下,session.verify引數不會被環境變數干擾,提高了API請求的安全性和可靠性。希望這篇文章對解決這個問題有所幫助。如果有任何疑問或需要進一步的解釋,請隨時提出。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70032566/viewspace-2995597/,如需轉載,請註明出處,否則將追究法律責任。

相關文章