我可以发送 **kwargs 来代替 requests.post 中的设置参数吗?
Can I send **kwargs in place of set parameter in requests.post?
我正在尝试建立一个基础 class,其中包含常见的 REST 方法,供以后测试框架中更具体的方法使用。我决定不创建与用户传入 data
、json
或 files
参数相对应的不同 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
),将导致数据“扩展”到调用的参数列表中。
我正在尝试建立一个基础 class,其中包含常见的 REST 方法,供以后测试框架中更具体的方法使用。我决定不创建与用户传入 data
、json
或 files
参数相对应的不同 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
),将导致数据“扩展”到调用的参数列表中。