验证所有请求的最佳方法是什么?

时间:2017-01-05 04:56:26

标签: python python-2.7

我有很多使用requests调用api的函数。因此,许多调用类似于下面的调用(本例简化):

(http%3A%2F%2F23.23.82.251%3A9116%2Fsolr%2Fdb%2Fselect%3Fq%3D*%3A*%2B_val_%3A%2522geodist%2528%2529%2522%26fq%3D(ProviderType%3A10)%26rows%3D100%26wt%3Djson%26indent%3Dtrue%26fl%3DProviderID%2CProviderType%2CProviderName%2CProviderAddress%2CCityAreaID%2CCityAreaName%2CCity%2CState%2CLatlong%2Cscore%26fq%3D{!geofilt}%26sfield%3DLatlong%26pt%3D20.296059%2C85.82454%26d%3D5%26sort%3Dgeodist()%2520asc)

所有请求都将通过身份验证,我希望找到一种更清晰的方式来验证所有请求,而不是仅在每次调用中包含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。我没有经验丰富的经验,所以这可能不是一个有效的例子,但我想知道这是否是正确的方法,或者我是否应该使用不同的方法来做到这一点?

1 个答案:

答案 0 :(得分: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)