什么是python请求包相当于curl --data-urlencode调用?

时间:2017-12-12 15:39:24

标签: 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

我目前正致力于将我的bash脚本转换为python,并且我希望使用python requests 包(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()

虽然命令行打印了预期的字符串,但python代码却没有。 它也不会引发异常。

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

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

.resizable()参数中传递字符串时,data会将其发布而不对其进行编码。

您可以使用quote_plus对发布数据进行编码,

requests

或由'&'拆分和'='来创建字典。

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

答案 1 :(得分:0)

使用

import requests

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

response = requests.post(url, auth=myAuth, headers=crumbHeader, data=scriptData)
print(response.text)
response.raise_for_status()

至少适用于本例中的groovy脚本以及我在现实中使用的脚本。但是,这里似乎缺少 urlencode 功能,因此我不确定这是否适用于所有给定的groovy脚本。