2012-04-12 25 views
0

我正嘗試使用curl發佈一些數據。源數據使用JSON格式,但我想使用內容類型application/x-www-form-urlencoded發佈。我試圖做這樣的:將json數據編碼爲x-www-form-urlencoded

curl -X POST $URL --data-urlencode "@$data.json" --header "Content-Type: application/x-www-form-urlencoded" 

這是data.json:

{ 
    "action"  : "deploy_from_scratch_with_bundle", 
    "pusher"  : { "email" : "[email protected]" }, 
    "ref"   : "refs/heads/master", 
    "repo_choice" : "LOCAL" 
} 

但是這是行不通的:urlparse.parse_qs(蟒蛇)抱怨ValueError異常。

接收到的數據(parse_qs前):

%7B%0A%20%20%22action%22%20%20%20%20%20%20%3A%20%22deploy%5Ffrom%5Fscratch%5Fwith%5Fbundle%22%2C%0A%20%20%22pusher%22%20%20%20%20%20%20%3A%20%7B%20%22email%22%20%3A%20%22my%40email%2Ecom%22%20%7D%2C%0A%20%20%22ref%22%20%20%20%20%20%20%20%20%20%3A%20%22refs%2Fheads%2Fmaster%22%2C%0A%20%20%22repo%5Fchoice%22%20%3A%20%22LOCAL%22%0A%7D%0A 

什麼我錯在這裏做什麼?

+0

如果您對接收的數據進行分搜索,您可以縮小的字符或序列特別是扔了'ValueError'? – sarnold 2012-04-12 01:11:21

回答

0

您應該使用所享有的urllib2的,以解除引用的數據:

In [10]: urllib2.unquote("%7B%0A%20%20%22action%22%20%20%20%20%20%20%3A%20%22deploy%5Ffrom%5Fscratch%5Fwith%5Fbundle%22%2C%0A%20%20%22pusher%22%20%20%20%20%20%20%3A%20%7B%20%22email%22%20%3A%20%22my%40email%2Ecom%22%20%7D%2C%0A%20%20%22ref%22%20%20%20%20%20%20%20%20%20%3A%20%22refs%2Fheads%2Fmaster%22%2C%0A%20%20%22repo%5Fchoice%22%20%3A%20%22LOCAL%22%0A%7D%0A") 
Out[10]: '{\n "action"  : "deploy_from_scratch_with_bundle",\n "pusher"  : { "email" : "[email protected]" },\n "ref"   : "refs/heads/master",\n "repo_choice" : "LOCAL"\n}\n'