2013-07-12 71 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'。 –

相關問題