2014-02-12 49 views
0

我有一個UNIX腳本生成URL,並執行它:Python的要求相似,我的UNIX捲曲腳本

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和我嘗試使用「請求」和'urllib2'模塊,但它們似乎並不完全相同的請求。

這是我曾嘗試:

import requests 
import json 

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

params=[{'name':'BRANCH', 'value':'master'}, {'name':'GITURL', 'value':'https://github.test.ebay.com/test/test.git'}] 
payload = json.dumps(params) 
resp = requests.post(url, data={'json':payload}) 

我在這裏幹什麼什麼了嗎?

回答

2

如果我們打了一個測試服務器與捲曲的要求,我們看到,你正在做的是在張貼含有JSON編碼字符串值命名爲json表單數據字段。

~$ curl http://httpbin.org/post --data-urlencode json='{"foo": "bar"}' 
{ 
    "url": "http://httpbin.org/post", 
    "json": null, 
    "args": {}, 
    "form": { 
    "json": "{\"foo\": \"bar\"}" 
    }, 
    "origin": "0.0.0.0", 
    "data": "", 
    "headers": { 
    "Connection": "close", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "X-Request-Id": "1b5f0122-9e63-4e58-adff-e59c24f086e5", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.30.0", 
    "Content-Length": "35", 
    "Accept": "*/*" 
    }, 
    "files": {} 
} 

雖這麼說,我是你捲曲的腳本和你的Python腳本之間看到的主要區別是你張貼JSON編碼數據的結構。

你捲曲腳本張貼這樣的:

{ 
    "parameters": [{ 
    "name": "BRANCH", 
    "value": "foo", 
    }, 
    { 
    "name": "GITURL", 
    "value": "git://example.com/repo", 
    }] 
} 

你請求的代碼發佈

{ 
    "name": "BRANCH", 
    "value": "foo" 
} 

所以你不張貼相同的數據。如果您複製並粘貼我使用json.dumps的結構並將其粘貼到正確的數據上,則您應致電request.post。其餘的100%是正確的。

+0

我知道,我的回答不正確。曾經有OP同意的另一個答案,但現在已經失蹤了。 – laike9m

+0

編輯我的json有效載荷以將其與c​​url json有效載荷相匹配。我仍然沒有看到url被成功執行。 –

+0

@PiHorse如果編輯的問題是你所嘗試的,那麼你不會發送正確的。你必須對JSON編碼'{'參數':[{...},{...}]}'。 –

-1

試試這個:

params={'BRANCH':'master', 'GITURL':'https://github.test.com/test/test.git'} 
resp = requests.post(url, data=payload) 

requests:post-a-multipart-encoded-file 沒有必要轉儲數據到JSON,因爲

你的數據將自動錶單編碼時 請求的字典made

我已經使用了很多請求,只是簡單地傳遞一個字典工作。

+0

查看我的回答。 OP沒有試圖發佈多部分編碼文件,只是使用數據參數,因爲你建議不會工作。你沒有仔細閱讀OP的問題,你也沒有試着明白他們在做什麼。 –