我在使用 Python 的请求进行 API 调用时遇到一些奇怪的问题。我看过类似的问题,但它们都指向我已经实施的解决方案。
我尝试使用个人访问令牌 (PAT) 访问 Confluence 页面,但收到错误 401,当我检查令牌页面时,似乎从未使用过该令牌。
问题似乎不在于令牌的连接或有效性,因为:
auth=(user, pass)
而不是令牌进行身份验证。看起来请求没有正确传递数据。我做错了什么?
import requests
token = 'abcdefg'
page_id = 12345
url = f'https://my.confluence.instance.com/rest/api/content/{page_id}'
h = {
'Accept': 'Application/json',
'Authorization': f'Bearer {token}'
}
response = requests.get(url, headers=h)
print(response.status_code) # Prints 401
import subprocess
response = subprocess.run(
f'curl -H "Authorization: Bearer {token}" {url}',
shell=True,
capture_output=True,
text=True,
)
print(response) # Correctly prints JSON with page information
我已经发现问题了。我在 .netrc 中有一些主机的凭据信息。默认情况下,请求强制使用来自 .netrc 的数据进行身份验证
我已经通过忽略.netrc解决了这个问题:
import requests
token = 'abcdefg'
page_id = 12345
url = f'https://my.confluence.instance.com/rest/api/content/{page_id}'
h = {
'Accept': 'Application/json',
'Authorization': f'Bearer {token}'
}
with requests.Session() as session:
session.trust_env = False
response = session.get(url, headers=h)
print(response.status_code) # Prints 200!