在Python中执行类似于curl的URL - JenkinsAPI

时间:2014-02-12 04:03:19

标签: python linux bash python-2.7 curl

我试图通过执行以下操作使用shell脚本触发一些构建:

export url='http://test.com';
export job_name='MY_JOB_NAME';

jso="{\"parameter\": [{\"name\":\"BRANCH\",\"value\":\"master\"}, {\"name\":\"GITURL\",\"value\":\"https://github.test.com/test/test.git\"}]}";

curl $url/job/$job_name/build --data-urlencode json="$jso";

这很好用,但是当我尝试将它转换为python等价物时,它似乎没有触发URL:

import requests
import json

url='http://test.com/job/MY_JOB_NAME/build'

params={'name':'release_1.5', 'GITURL':'https://github.test.com/test/test.git'}
payload = json.dumps(params)
resp = requests.get(url=url, data=payload)

执行时没有任何错误,但它不会触发我的CI机器上的构建。

2 个答案:

答案 0 :(得分:1)

这里有很多你做错的事情。我希望显而易见的第一件事是你发送的JSON数据完全不同。

除此之外,您在这里遇到的主要问题是您的curl正在使用BODY中的urlencoded数据进行POST,并且您的python请求正在使用urlencoded数据作为URL中的单独参数进行GET。将.get更改为.post,将params =更改为data =,您应该更接近预期的目标。

resp = requests.post(url=url, data={'json':payload})

另请注意,我将您的有效负载嵌入到json中的密钥中,因为这是您的卷曲中发生的事情。我并不完全了解您的实施细节,但我希望这有助于您走上正确的道路。

答案 1 :(得分:-1)

将内容类型添加到请求的标题中,即:

headers = {'content-type': 'application/json'}
...
resp = requests.get(url=url, params=payload, headers=headers)