合并请求中的冗余参数

时间:2018-08-05 23:56:14

标签: python request arguments parameter-passing

我在代码中使用了requests模块(显然是在做请求),由于我需要为每个请求包括冗余参数,因此我的代码很快就失控了:

def one(url, data, headers, cert):
    ...
    return requests.post(url, json=data, headers=headers, verify=cert)

def two(otherurl, otherheaders, cert):
    ...
    response = requests.get(otherurl, headers=otherheaders, verify=cert).json()

是否有一种方法可以告诉每个请求使用verify=cert,而不必在每个请求语句中都包含它?我在想session()应该能够做到这一点,尽管我不知道如何使用它。我只是想尽量减少可能在脚本中全局设置的重复。也许这是不可能的,或者它实际上是如何工作的?预先感谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,您可以使用functools.partial作为参数传递verify=cert来覆盖这些功能:

from functools import partial
requests.post = partial(requests.post, verify=cert)
requests.get = partial(requests.get, verify=cert)

或者,如果您查看requests的源代码,您会发现这两个函数都只是requests.request函数的包装,而后者又是{{ 1}}方法。因此,您可以替代requests.Session.request来用一条语句替代所有HTTP方法。但是,由于它是一个方法而不是一个未绑定的函数,所以必须使用requests.Session.request代替:

functools.partialmethod