如何在python中使用github api令牌请求

2024-09-27 19:09:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以使用用户名和密码在python中获取Github api令牌,但不能使用该api令牌请求任何POST/DELETE/PATCH。

我们如何使用Github API令牌来发出任何请求。 例如,我有一个API令牌,比如说'hbnajkjanjknjnh23b2jk2kj2jnkl2…'

现在请求

#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)

但我总是收到带有Bad Crediantials消息的401 error

在不输入密码的情况下使用API令牌的正确方法是什么


Tags: selfgithubtokenapi密码usernamedeletepost
2条回答

这里有一些代码可以帮助你。

示例:

示例1(auth):

username = 'user'
token = 'token'

login = requests.get('https://api.github.com/search/repositories?q=github+api', auth=(username,token))

示例2(标题):

headers = {'Authorization': 'token ' + token}

login = requests.get('https://api.github.com/user', headers=headers)
print(login.json())

例3(删除回购协议):

user = 'username'
repo = 'some_repo' # Delete this repo

headers = {'Authorization': 'token ' + token}

login = requests.delete('https://api.github.com/' + 'repos/' + user + '/' + repo, headers=headers)

示例4(创建回购协议):

repo = 'some_repo'
description = 'Created with api'

payload = {'name': repo, 'description': description, 'auto_init': 'true'}

login = requests.post('https://api.github.com/' + 'user/repos', auth=(user,token), data=json.dumps(payload))

您可能需要查看以下文档:

Requests Docs

Github API docs

我希望这能有帮助。

首先,我建议使用API的包装器。您在这里提出了很多问题,可以通过找到一个您喜欢的API包装器来简化这些问题。有一个用Pythonhere编写的包装器列表。

至于您实际回答的问题,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)

会话对象将为您处理身份验证(通过令牌或用户名和密码组合)。

另外,如果最终决定使用github3.py满足API包装器的需要,这里有一个标记。

相关问题 更多 >

    热门问题