将json数据编码为x-www-form-urlencoded

时间:2012-04-12 01:07:05

标签: python curl urlencode

我正在尝试发布curl一些数据。源数据是JSON,但我想发布内容类型application/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" : "my@email.com" },
  "ref"         : "refs/heads/master",
  "repo_choice" : "LOCAL"
}

但这不起作用:urlparse.parse_qs(python)抱怨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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

您应该使用urllib2中的unquote取消引用该数据:

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" : "my@email.com" },\n  "ref"         : "refs/heads/master",\n  "repo_choice" : "LOCAL"\n}\n'