Python requests库使用三个参数的HTTPBasicAuth

22 投票
1 回答
54672 浏览
提问于 2025-04-17 15:24

我正在尝试使用Instapaper的简单开发者API,通过Python和requests库把一个网址添加到我的书签里。为了验证用户名和密码,一切都很顺利。

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

但是在尝试使用这个API添加书签时:

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

我遇到了一个错误:

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)

我觉得这是因为HTTPBasicAuth不能接受第三个参数,有人知道怎么解决这个问题吗?

1 个回答

22

HTTPBasicAuth() 只接受用户名和密码这两个参数。没有第三个参数,没得说。

HTTP基本认证会在请求中添加一个额外的头信息;这些信息和GET或POST参数是分开的。当你使用这种认证方式时,不需要再把 usernamepassword 参数传给API方法。

要添加一个书签,只需要把 url 参数作为POST或GET数据参数传入:

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

使用 requests.get()requests.post() 都可以。

撰写回答