什么是等同于curl --data-urlencode调用的python请求软件包?

Kni*_*chi 6 jenkins python-requests

我正在使用以下命令行调用在jenkins CLI服务器上执行groovy脚本:

curl --user 'Knitschi:myPassword' -H "Jenkins-Crumb:1234" --data-urlencode "script=println 'Hello nice jenkins-curl-groovy world!'" localhost:8080/scriptText
Run Code Online (Sandbox Code Playgroud)

我目前正在将bash脚本转换为python,我想使用python 请求包(http://docs.python-requests.org/en/master/)做与上述调用等效的操作。

到目前为止,我有

import requests

url = 'http://localhost:8080/scriptText'
myAuth = ('Knitschi', 'myPassword')
crumbHeader = { 'Jenkins-Crumb' : '1234'}
scriptData = "script=println 'Hello cruel jenkins-python-groovy world!'"

response = requests.post(url, auth=myAuth, headers=crumbHeader, data=scriptData)
print(response.text)
response.raise_for_status()
Run Code Online (Sandbox Code Playgroud)

当命令行打印期望的字符串时,python代码不会。它也不会引发异常。

另外,我不确定是否应该使用requests.get()requests.post()。我的网络技术知识非常有限。

感谢您的时间。

t.m*_*dam 1

在参数中传递字符串时datarequests将其发布而不对其进行编码。

您可以使用quote_plus对您的帖子数据进行编码,

scriptData = "script=println 'Hello cruel jenkins-python-groovy world!'"
scriptData = urllib.parse.quote_plus(scriptData, '=')
Run Code Online (Sandbox Code Playgroud)

或用“&”和“=”分割来创建字典。

scriptData = "script=println 'Hello cruel jenkins-python-groovy world!'"
scriptData = dict(i.split('=') for i in scriptData.split('&'))
Run Code Online (Sandbox Code Playgroud)