2013-07-12 30 views
6

Tôi có thể nhận mã thông báo Github api bằng python sử dụng tên người dùng và mật khẩu nhưng tôi không thể sử dụng API-Token đó để yêu cầu bất kỳ POST/DELETE/PATCH nào.cách sử dụng github api token trong python để yêu cầu

Cách chúng tôi sử dụng Github API-Tokens để thực hiện bất kỳ yêu cầu nào. Đối với ví dụ, tôi có API-Mã cho phép nói 'hbnajkjanjknjknh23b2jk2kj2jnkl2 ...'

bây giờ cho yêu cầu

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

Nhưng tôi luôn nhận được 401 error với Bad Crediantials nhắn.

cách thích hợp để sử dụng API-Token mà không cần nhập mật khẩu

+0

chúng ta không thể sử dụng một cái gì đó như 'requests.post (...., auth = api_token)' thay vì 'auth = (tên người dùng, mật khẩu)' – softvar

Trả lời

12

Đối với một là gì, tôi sẽ khuyên bạn nên sử dụng một wrapper cho API. Bạn đang hỏi rất nhiều câu hỏi ở đây có thể được đơn giản hóa bằng cách tìm một trình bao bọc có API mà bạn đánh giá cao. Có một danh sách các trình bao bọc được viết bằng Python here.

Để thực sự trả lời câu hỏi của bạn, tài liệu GitHub khá rõ ràng rằng bạn cần gửi Authorization header. Cuộc gọi của bạn thực sự sẽ trông giống như sau:

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

Vì có vẻ như bạn đang sử dụng yêu cầu và lớp học, tôi có thể quá đậm để đưa ra đề xuất không? Giả sử bạn đang làm một cái gì đó như tạo một ứng dụng khách cho API. Bạn có thể có một lớp học như vậy:

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) 

Đối tượng phiên sẽ quản lý xác thực cho bạn (bằng mã thông báo hoặc kết hợp tên người dùng và mật khẩu).

Ngoài ra, nếu bạn quyết định sử dụng github3.py cho các yêu cầu trình bao bọc API của mình, có một thẻ ở đây cho nó.

+0

bằng cách sử dụng 'self.session.headers ['Authorization'] = 'token% s'% self.api_token' và không sử dụng 'auth = (tên người dùng, mật khẩu)' bên trong 'requests.post()' đang trả lời bằng '{u'message ': u'Not Found'} ' – softvar

+0

Bạn không sử dụng 'requests.post' với điều này, bạn sử dụng' self.session.post'. –