2013-07-12 36 views
6

我能够使用用户名和密码在python中获得Github api令牌,但是我不能使用该API令牌来请求任何POST/DELETE/PATCH。如何在python中使用github api令牌来请求

我们如何使用Github API令牌进行任何请求。 对于例如,我有API令牌可以说“hbnajkjanjknjknh23b2jk2kj2jnkl2 ......”

现在请求

#i'm providing username and API-Token in headers like  
self.header = {'X-Github-Username': self.username, 
       'X-Github-API-Token': self.api_token     
       } 
#then requesting(post) to create a gist 
r = requests.post(url, headers=headers) 

但我一直都想与401 errorBad Crediantials消息。

什么是使用API​​的令牌,而无需输入密码

+0

我们不能使用'requests.post(....,auth = api_token)'而不是'auth =(用户名,密码)' – softvar

回答

12

对于一个适当的方式,我会建议使用的API的包装。你在这里问了很多问题,可以通过找到一个你认识API的包装来简化。有一个用Python编写的包装器列表here

至于你实际回答你的问题,GitHub文档相当清楚,你需要发送Authorization header。您的电话实际上是这样的:

self.headers = {'Authorization': 'token %s' % self.api_token} 
r = requests.post(url, headers=self.headers) 

因为它好像你正在使用的请求和一类,我可能会大胆地提出建议?假设您正在为API创建一个客户端。你可能有这样的一个类:

class GitHub(object): 
    def __init__(self, **config_options): 
     self.__dict__.update(**config_options) 
     self.session = requests.Session() 
     if hasattr(self, 'api_token'): 
      self.session.headers['Authorization'] = 'token %s' % self.api_token 
     elif hasattr(self, 'username') and hasattr(self, 'password'): 
      self.session.auth = (self.username, self.password) 

    def call_to_the_api(self, *args): 
     # do stuff with args 
     return self.session.post(url) 

会话对象将负责您的身份验证(通过令牌或用户名和密码组合)。另外,如果你最终决定为你的API包装需求使用github3.py,这里有一个标签。

+0

'使用'self.session.headers ['Authorization'] = 'token'%s'%self.api_token'并且不在'requests.post()'内使用'auth =(username,password)''用'{u'消息'回应:'找不到'} ' – softvar

+0

你不使用'requests.post',你可以使用'self.session.post'。 –

相关问题