2012-12-11 52 views
25

Tôi đang cố gắng để có được một truy vấn API vào python. Dòng lệnhyêu cầu python với xác thực (access_token)

curl --header "Authorization:access_token myToken" https://website.com/id 

cung cấp một số đầu ra json. myToken là một biến thập lục phân vẫn không đổi trong suốt. Tôi muốn thực hiện cuộc gọi này từ python để tôi có thể lặp qua các id khác nhau và phân tích đầu ra. Bất kỳ ý tưởng? Trước khi xác thực là cần thiết tôi đã làm điều đó với urllib2. Tôi cũng đã xem xét các mô-đun yêu cầu nhưng không thể tìm ra cách để làm điều đó.

Rất cám ơn.

+0

Thiết lập một thẻ auth cho toàn bộ phiên: https://stackoverflow.com/a/47043335/911945 –

Trả lời

49

Gói requests có một API rất tốt đẹp cho các yêu cầu HTTP, thêm một tiêu đề tùy chỉnh các công trình như thế này (source: official docs):

>>> import requests 
>>> response = requests.get(
... 'https://website.com/id', headers={'Authorization': 'access_token myToken'}) 

Nếu bạn không muốn sử dụng một sự phụ thuộc bên ngoài, điều tương tự sử dụng urllib2 của thư viện chuẩn trông như thế này (source: the missing manual):

>>> import urllib2 
>>> response = urllib2.urlopen(
... urllib2.Request('https://website.com/id', headers={'Authorization': 'access_token myToken'}) 
+0

Cảm ơn phản hồi của bạn . Tôi đã thử cả hai triển khai và tôi nhận được lỗi HTTP 401: Không được ủy quyền. Tuy nhiên, dòng lệnh hoạt động tốt. Tôi chưa bao giờ làm việc với mã thông báo truy cập, do đó, chỉ cần được rõ ràng: các mã thông báo mà tôi có là 40 chữ số của các hình thức 3f4264ff vv – user1895406

+1

Lạ. Những gì lỗi tôi một chút là ruột kết trong tiêu đề ... ah! Có lẽ tôi (hoặc cả hai chúng tôi) chỉ đọc sai. Tiêu đề có thể được đặt tên là "Ủy quyền" và giá trị ** của nó sau đó sẽ là "access_token long_hexadecimal_string". Bạn muốn cho rằng một spin? – wosc

+0

đã hoạt động! cảm ơn bạn rất nhiều. những gì tôi đã kết thúc bằng cách gõ là url = 'https://website.com/id' đầu = {'Ủy quyền': 'access_token hex_string'} res = requests.get (url, tiêu đề = đầu) – user1895406

1

tôi đã cùng một vấn đề khi cố gắng sử dụng một mã thông báo với Github.

Cú pháp duy nhất mà đã làm việc cho tôi với Python 3 là:

import requests 

myToken = '<token>' 
myUrl = '<website>' 
head = {'Authorization': 'token {}'.format(myToken)} 
response = requests.get(myUrl, headers=head) 
Các vấn đề liên quan