【发布时间】:2012-07-24 06:36:52
【问题描述】:
我有以下代码,它应该执行在 github 上创建新下载的第一部分。它应该使用 POST 发送 json 数据。
jsonstring = '{"name": "test", "size": "4"}'
req = urllib2.Request("https://api.github.com/repos/<user>/<repo>/downloads")
req.add_header('Authorization', 'token ' + '<token>')
result = urllib2.urlopen(req, jsonstring)
如果我从urlopen() 中删除, jsonstring,它不会失败,并会为我提供可用下载列表。但是,如果我尝试 POST json 字符串,我会收到 404 错误。
问题一定出在 json 上,或者是我发送它的方式,但我无法弄清楚问题出在哪里。
<...> 的字符串在实际代码中是正确的,我只是从帖子中删除了它们
我在命令行上尝试了与curl 大致相同的方法,但身份验证方法略有不同,并且成功了。
已测试:
Works(返回想要的 json):
curl -u "user:password" --data "json..." https://api.github.com/repos/<user>/<repo>/downloads
作品:
curl -H 'Authorization: token <token>' https://api.github.com/
不起作用(返回“无效凭据”):
curl -H 'Authorization: token <invalid_token>' https://api.github.com/
不起作用(“未找到”):
curl -H 'Authorization: token <valid_token>' --data "json..." https://api.github.com/repos/<user>/<repo>/downloads
这似乎不是特定于 python 代码的问题。 json POST 数据似乎很好,OAuth 令牌授权似乎(至少部分)有效。但是当这些放在一起时,它就停止工作了。
【问题讨论】:
-
对于 varesa 或@pelson,使用 curl 的“略有不同的方法”是什么?这里不能用那个方法吗?
-
@blahdiblah 不同的方法是使用 -u "user:passwd" 而不是授权令牌。我尝试了令牌和卷曲,同样的问题
标签: python json post urllib2 github-api