0

我正在尝试发布curl一些数据。源数据采用 JSON 格式,但我想使用 content-type 发布application/x-www-form-urlencoded。我正在尝试这样做:

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

这是数据.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

我在这里做错了什么?

4

1 回答 1

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'
于 2012-04-12T01:51:10.777 回答