2013-07-12 7 views
6

ユーザー名とパスワードを使用してPythonでGithub apiトークンを取得できますが、そのAPIトークンを使用してPOST/DELETE/PATCHをリクエストすることはできません。リクエストのためにPythonでgithub apiトークンを使用する方法

どのようにGithub APIトークンを使用してリクエストしますか?例えばのために は、私は

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

を要求するための '... hbnajkjanjknjknh23b2jk2kj2jnkl2' をAPI-トークンが言うことができます今

があるが、私はいつもBad Crediantialsメッセージで401 errorを取得しています。

一つはパスワード

+0

'auth =(username、password)'の代わりに 'requests.post(....、auth = api_token)'を使うことはできません – softvar

答えて

12

を入力することなくAPI-トークンを使用する適切な方法は何、私はAPIのラッパーを使用することをお勧めします。ここでは、あなたが感謝するAPIを持つラッパーを見つけることによって簡略化できる多くの質問をしています。 Python hereで書かれたラッパーのリストがあります。

実際にあなたの質問に答えるには、Authorization headerを送信する必要があるという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) 

セッションオブジェクトは、(トークンまたはユーザー名とパスワードの組み合わせで)認証を処理します。

また、APIラッパーのニーズにgithub3.pyを使用することになった場合は、ここにタグがあります。

+0

'self.session.headers [Authorization '] = '{user'} 'トークン%s'%self.api_token'で、 'auth =(username、password) 'を使わないで' requests.post() 'の中に' {u'message':U'Not Found '}と返信しています ' – softvar

+0

これで 'requests.post'を使わないで、' self.session.post'を使います。 –

関連する問題