2013-02-10 41 views
8

Tôi đang cố gắng sử dụng Instapaper's simple developer api để thêm url vào dấu trang của mình bằng python và thư viện yêu cầu. Để xác thực tên người dùng và mật khẩu, tất cả đều hoạt động tốt.Python yêu cầu thư viện HTTPBasicAuth với ba tham số

import requests 
from requests.auth import HTTPBasicAuth 
requests.get('https://www.instapaper.com/api/authenticate', auth=HTTPBasicAuth('username', 'password')) 

Nhưng khi cố gắng sử dụng api để thêm một bookmark:

requests.get('https://www.instapaper.com/api/add', auth=HTTPBasicAuth('username', 'password','websiteUrl')) 

tôi nhận được lỗi:

File "instantbookmark.py", line 3, in <module> 
    getA = requests.get('https://www.instapaper.com/api/add',  auth=HTTPBasicAuth('username', 'password','websiteUrl')) 
TypeError: __init__() takes exactly 3 arguments (4 given) 

Tôi nghĩ rằng điều này là do HTTPBasicAuth không thể lấy một số thứ ba , có ai biết cách để làm điều này không?

+0

Đó là lỗi truy xuất đầy đủ – Wilberto

+0

Vâng, tôi đã kiểm tra nguồn yêu cầu và tài liệu về API, xem câu trả lời của tôi bên dưới. –

Trả lời

7

HTTPBasicAuth() chỉ bao giờ nhận đối số tên người dùng và mật khẩu. Không có đối số thứ ba, toàn dừng.

Xác thực cơ sở HTTP thêm tiêu đề bổ sung vào yêu cầu; thông tin này được giữ riêng biệt với các tham số GET hoặc POST. Khi bạn sử dụng hình thức xác thực này, bạn cũng không cần chuyển bất kỳ tham số usernamepassword nào vào các phương thức API.

Để thêm một bookmark, vượt qua trong các tham số url như một POST hoặc GET tham số dữ liệu:

requests.post('https://www.instapaper.com/api/add', data={'url': 'websiteUrl'}, auth=HTTPBasicAuth('username', 'password')) 

Hoặc requests.get() hoặc requests.post() sẽ làm.

Các vấn đề liên quan