我正在尝试发布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
我在这里做错了什么?
答案 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'