python django urllib2.request,发布请求,我的代码无效。我发送的数据未被检测到

时间:2012-07-02 08:03:31

标签: python django urllib2

这是要求:

所有写API都需要JSON编码的内容。许多人也接受文件上传。因此,我们希望API请求具有内容类型multipart / form-data,并且JSON主体的请求应具有名称 data

$ curl -F file=@/Users/alunny/index.html -u username@gmail.com -F 'data={"title":"API V1 App","package":"com.alunny.apiv1","version":"0.1.0","create_method":"file"}' https://build.phonegap.com/api/v1/apps

* 从上面的网址中,留下该电子邮件,因为我已经拥有了我可以使用的身份验证令牌*

这是我的代码:

url='url?auth_token='+token  //i have token , so no probs

da = {"create_method" : "file","title":"s9fsdf"}
da = {"data" : da}
da = urllib.urlencode(da)
req = urllib2.Request(url)
req.add_data(json.dumps(da))
req.add_header('Content-Type', 'multipart/form-data')
#req.add_header('Accept', 'application/json')  
result = ""

try:
    result = urllib2.urlopen(req)
except urllib2.URLError,e :
    print "Code : "+str(e.code)
    print e.read()    

低于错误:

Code : 400
{"error":"no create_method specified: file, remote_repo, or hosted_repo"}

我认为我发送数据的方式是错误的,任何人都可以告诉我正确的方法。当我们发送数据时,它应该有名称“data”。

1 个答案:

答案 0 :(得分:1)

未经测试,但它可能比其他方式更好地对json数据进行urlencoding:

jsondata = {"create_method" : "file","title":"s9fsdf"}
data = {"data" : json.dumps(jsondata)}
data = urllib.urlencode(data)
req = urllib2.Request(url)
req.add_data(data)