【发布时间】:2018-07-29 15:09:32
【问题描述】:
我已经浏览了许多与使用基本身份验证触发 GET 请求相关的类似帖子(例如:Python, HTTPS GET with basic authentication),但仍然无法找出问题所在。我不断收到错误 requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url
使用相同的凭据,标题在邮递员中尝试相同,它按预期工作。验证了api_key的base64encoded值,password和postman中使用的值完全一样,所以我认为不是它的编码或资源访问权限问题。
python -V
Python 3.6.4 :: Anaconda, Inc.
方法 1
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()
方法 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()
你能提供一些指导吗?
【问题讨论】:
-
有什么理由不使用
requests.get(url, headers=headers, auth=(api_key, password))而不是手动设置授权标头? -
@JonClements 也尝试了该选项,仍然是相同的 401 客户端错误,更新后的代码
-
如果一切都与邮递员完全相同 - 可能值得检查服务器是否因为用户代理或其他原因而拒绝请求?
-
我认为出现此错误是因为您缺少 User-Agent 标头
-
你解决了这个问题吗?解决方案是什么?
标签: python python-requests basic-authentication