Python github发布api 401,为什么?(django)

Python github发布api 401,为什么?(django),python,django,http-status-code-401,github-api,Python,Django,Http Status Code 401,Github Api,我正在尝试将github问题api集成到一个项目中。我想我在遵循oauth的规则,以及所有需要和提到的内容, 但它似乎不起作用。我没有收到详细的错误信息,只是一个401 我在github(api v2)注册了一个oauth应用程序,并提供了回调url 我构造身份验证url: 他们为我发布代码(请求令牌),我将其交换为ho访问令牌,效果良好。 问题是: 我可以在自己的回购协议上观看自己发行的债券,但如果我只是一个合作者,那就是401(未经授权) 即使是在我自己的回购协议上,也无法发行新债券: 职

我正在尝试将github问题api集成到一个项目中。我想我在遵循oauth的规则,以及所有需要和提到的内容, 但它似乎不起作用。我没有收到详细的错误信息,只是一个401

  • 我在github(api v2)注册了一个oauth应用程序,并提供了回调url
  • 我构造身份验证url:
  • 他们为我发布代码(请求令牌),我将其交换为ho访问令牌,效果良好。 问题是:
  • 我可以在自己的回购协议上观看自己发行的债券,但如果我只是一个合作者,那就是401(未经授权)
  • 即使是在我自己的回购协议上,也无法发行新债券: 职位: 参数: body=&login=&token=6&title=
django、python的实际实现:

url = 'https://github.com/login/oauth/access_token?client_id=%(client_id)s&redirect_uri=%(redirect_uri)s&client_secret=%(client_secret)s&code=%(code)s' % locals()        
req = urllib2.Request(url)
response = urllib2.urlopen(req).read()
access_token = re.search(r'access_token=(\w+)', response).group(1)
url = 'http://github.com/api/v2/json/issues/open/%(user)s/%(repo)s' % locals()
params = urllib.urlencode({'login': user, 'token': access_token, 'title': 'title', 'body': 'body'})
req = urllib2.Request(url, params)
try:
    response = urllib2.urlopen(req)
except HTTPError, e:
    return HttpResponse('[*] Its a fckin %d' % e.code)
except URLError, e:
    return HttpResponse('[*] %s\n' % repr(e.reason))
else:
    resp = json.loads(response.read())

我不知道这是否正是您所需要的,但这是我在我的一个项目中用来解决问题的代码:

def issue(self, channel, network, nick, user, title, repoName):
    body = 'Issue sent from %s at %s by %s (registered as %s)' % \
            (channel, network, nick, user.name)
    login = self.registryValue('login')
    token = self.registryValue('token')
    data='title=%s&body=%s&login=%s&token=%s' % (title, body, login, token)
    url = 'http://github.com/api/v2/json/issues/open/' + repoName
    response = json.loads(urllib.urlopen(url, data=data).read())
    id = response['issue']['number']
    return id
问题可能是

params = urllib.urlencode(
    {'login': user, 'token': access_token, 'title': 'title', 'body': 'body'}
)
指定title参数的文字值为“title”,与“body”相同

你可能想要这个吗

params = urllib.urlencode(
    {'login': user, 'token': access_token, 'title': title, 'body': body}
)

我实际上也有类似的问题。我使用的是Ruby,不是Python,但我遇到的问题是,如果我试图访问属于我所属组织的私有回购的问题,我会返回401错误。我拥有此repo的完全权限。我在使用v3 api和基本身份验证时遇到了相同的问题。这似乎是一个api问题,可以将其作为github开发人员的bug发布,为了确保我公司的实习生在API方面遇到了一些问题,github非常乐于帮助他使用API,并解决了API本身的问题。看看这些代码,我不相信您创建的OAuthed帖子是正确的。您需要的不仅仅是令牌,还应该对参数的散列进行签名?为什么不尝试使用OAuth库来发出请求呢?成功的可能性要大得多。实际上,“title”和“body”是一些虚拟文本,用来说明问题:),但是如果它现在对@Valentin Lorentz有效,他们可能已经修复了api问题。