python - 我可以发送 **kwargs 来代替 requests.post 中的设置参数吗?

标签 python rest python-requests keyword-argument

我正在尝试设置一个包含常见 REST 方法的基类,以便在以后的测试框架中由更具体的方法使用。我决定不创建与用户传入的 datajsonfiles< 相对应的不同 request.post 方法 参数,我会创建一种方法,该方法具有 url 和 header 的设置参数,并让用户在 **kwargs 中传递他们想要的任何其他内容。但是,我不确定是否可以在这种情况下使用 *kwargs,因为 requests 模块似乎需要一个位置参数。这是我到目前为止所拥有的:

class Action:

    def __init__(self, url, requestHeaders, **kwargs):
        self.url = url
        self.requestHeaders = requestHeaders
        self.kwargs = kwargs

    def postAction(self):
        response = requests.post(self.url, headers=self.requestHeaders, self.kwargs)
        resultCode = response.status_code
        resultMessage = response.text
        print(resultCode)
        print(resultMessage)
        return  resultCode,resultMessage

例如,kwargs 可能包含 files={'csv': ('/path/to/csv.csv', open('csv.csv, 'rb'), 'text/csv')}verify=false。在另一个请求中,files 可能会替换为 data。然而,当我尝试测试时,我得到了这样的结果:

Traceback (most recent call last):
  File "/home/user1/test/action.py", line 24
    response = requests.post(self.url, headers=self.requestHeaders, self.kwargs)

SyntaxError: positional argument follows keyword argument

我想做的事情可能吗?如果没有,有其他选择吗?

最佳答案

如果您希望将 kwargs 视为给予 post 的关键字参数,则需要使用 ** 来应用它们:

response = requests.post(self.url, headers=self.requestHeaders, **self.kwargs)

这与序列解包 (*seq) 类似,将导致数据“扩展”到调用的参数列表中。

关于python - 我可以发送 **kwargs 来代替 requests.post 中的设置参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66464530/

相关文章:

python - 如何使用 Paramiko 日志记录?

python - 将 float 转换为等效的四舍五入十进制数

rest - 在不使用插件的情况下向 Firefox HTTP 请求添加 header

java - Salesforce REST API 查询超过 2000

python - HTML 抓取 XPath

python - 无法通过python登录网站

python - 无平铺的水平串联的有效方法

python - 如何有效地总结数组 X 中每个不同值 c 的所有元素 Y[i],其中 X[i] = k?

javascript - X-WP-Nonce == Cookie 随机数无效

python - 使用 python 抓取谷歌精选片段