2017-01-05 25 views
2

我有一些使用requests來調用api的函數。因此,一個號碼的呼叫類似的一個下面(簡化這個例子)的:驗證所有請求的最佳方法?

requests.get(url, data=data, auth=('user','password')) 

所有的請求都將被授權,但我想找個認證的所有要求一個更清潔的方式,而不是僅僅包括在每次通話中都會有auth=('user','password')部分。

我的第一個想法是創建一個繼承自requests類的子類,然後重寫get函數。類似下面:

class authRequests(requests): 
    def get(url, data): 
    return requests.get(url, data=data, auth=('user', 'password')) 

然後用authRequests.get代替requests.get。我沒有豐富的Python經驗,所以這可能不是一個有效的例子,但我想知道這是否是正確的方法,或者如果我應該使用不同的方法來做到這一點?

回答

2

您應該使用requests.Session()跨越不同的請求堅持的東西:

會話還可以用來提供默認數據請求的方法。這是由Session對象

with requests.Session() as session: 
    session.auth = ('user', 'password') 

    session.get(url, data=data1) 
    response = session.post(another_url, data=data2) 
+0

啊有趣的提供數據的屬性來完成 - 所以,如果我有15個功能包含對'GET'電話,我可以只是包裝的所有功能與'with'聲明? –

+0

@AbeMiessler yup,你不必使用'with'上下文管理器,可以實例化一個會話對象並傳遞它。如果函數是同一類的方法,那麼可以將會話實例化爲一個實例屬性:'self.session = requests.Session()'並使用它來發出請求'self.session.get(url,data = data) '..希望有幫助。 – alecxe

+0

美麗 - 謝謝! –