2013-07-12 26 views
6

Jestem w stanie zdobyć token GitHi w Pythonie przy użyciu nazwy użytkownika i hasła, ale nie mogę używać tego tokena API do żądania POST/DELETE/PATCH.jak używać tokenu APIT Githuba w pythonie do żądania

W jaki sposób korzystamy z tokenów API Githuba do wysyłania żądań. Dla np, mam API-Reklamowe powiedzmy 'hbnajkjanjknjknh23b2jk2kj2jnkl2 ...'

teraz za zainteresowanie

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

ale zawsze jestem coraz 401 error z Bad Crediantials wiadomości.

Jaki jest właściwy sposób korzystać z API-tokeny bez wprowadzania hasła

+0

nie możemy użyć czegoś takiego jak 'requests.post (...., auth = api_token)' zamiast 'auth = (nazwa użytkownika, hasło)' – softvar

Odpowiedz

12

Dla jednego, polecam użyciu otoki dla interfejsu API. Zadajesz tutaj wiele pytań, które można uprościć, znajdując opakowanie, którego interfejs API docenisz. Jest lista wrapperów napisanych w Pythonie here.

Jeśli chodzi o faktyczne udzielenie odpowiedzi na swoje pytanie, dokumentacja GitHub jest dość jasna, że ​​należy wysłać Authorization header. Rozmowa będzie faktycznie wyglądać następująco:

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

Ponieważ wydaje się, że używasz żądania i klasę, że mogę być tak śmiały, aby wydać zalecenie? Powiedzmy, że robisz coś w rodzaju tworzenia klienta dla API. Można mieć klasę tak:

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) 

Obiekt Session zajmie uwierzytelniania dla Ciebie (albo przez tokeny lub kombinacji nazwy użytkownika i hasła).

Ponadto, jeśli zdecydujesz się użyć github3.py do swoich potrzeb związanych z otokiem interfejsu API, istnieje tutaj dla niego znacznik.

+0

używając 'self.session.headers ['Authorization'] = 'token% s'% self.api_token' i nie używając 'auth = (nazwa użytkownika, hasło)' wewnątrz 'requests.post()' odpowiada ponownie z '{u'message ': u'Nie znaleziono'} ' – softvar

+0

' Nie używasz 'requests.post' z tym, używasz' self.session.post'. –