基本身份验证返回 401 客户端错误,但在邮递员中有效

mad*_*rix 2 python basic-authentication python-requests

我已经浏览了许多与使用基本身份验证触发 GET 请求相关的类似帖子(例如:Python、带有基本身份验证的 HTTPS GET),但仍然无法找出问题。我不断收到错误requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url

使用相同的凭据,标头在邮递员中尝试了相同的操作,它按预期工作。已验证 api_key、password 的 base64encoded 值与 postman 中使用的值完全相同,因此我不认为其编码或资源访问权限问题。

python -V
Python 3.6.4 :: Anaconda, Inc.
Run Code Online (Sandbox Code Playgroud)

方法一

api_key = 'some_api_key'
password = 'some_password'
headers = {'accept': 'application/json'}

url = 'https://test.access.com/this/url'

api_key_password = "%s:%s" % (api_key, password)

b64_encoded = b64encode(bytes(api_key_password, 'utf-8')).decode("ascii")

headers['authorization'] = 'Basic %s' %  b64_encoded

response = requests.get(url,
                        headers=headers)

if (response.ok):
    json_data = json.loads(response.content)
    print (json_data)
else:
    print (response)
    response.raise_for_status()
Run Code Online (Sandbox Code Playgroud)

方法2

api_key = 'some_api_key'
password = 'some_password'

url = 'https://test.access.com/this/url'

headers = {
    'accept': 'application/json',
}

response = requests.get(url, headers=headers, auth=(api_key, password))
print (response.ok)

if (response.ok):
    json_data = json.loads(response.content)
    print (json_data)
else:
    print (response)
    response.raise_for_status()
Run Code Online (Sandbox Code Playgroud)

您能提供一些指示吗?

小智 5

我遇到了类似的问题(尽管是在 .NET Framework 中)。

就我而言,原因是我使用的 url 最后没有正斜杠,而 API 显然不支持这一点。

所以https://test.access.com/this/url

抛出 401 错误未经授权

https://test.access.com/this/url/

返回 200 确定。