ユーザー名とパスワードを使用してpythonでGithub apiトークンを取得できますが、POST/DELETE/PATCHをリクエストするためにそのAPIトークンを使用することはできません。
リクエストを行うためにGithubAPIトークンをどのように使用しますか。たとえば、私は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 error
メッセージとともにBad Crediantials
を受け取ります。
パスワードを入力せずにAPIトークンを使用する適切な方法は何ですか
1つは、APIのラッパーを使用することをお勧めします。ここでは、APIを高く評価するラッパーを見つけることで簡略化できる、多くの質問をしています。 Python here で書かれたラッパーのリストがあります。
実際に質問に答える場合、GitHubのドキュメントでは、 認証ヘッダー を送信する必要があることがかなり明確になっています。実際の通話は次のようになります。
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)
Sessionオブジェクトが認証を処理します(トークンまたはユーザー名とパスワードの組み合わせのいずれかによる)。
また、APIラッパーのニーズにgithub3.pyを使用することにした場合は、ここにタグがあります。
これがあなたを助けるかもしれないいくつかのコードです。
例1(認証):
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))
次のドキュメントをご覧ください。
これがお役に立てば幸いです。