【问题标题】:ActiveMQ REST management API authentication with urllib 401 Unauthorized [duplicate]使用 urllib 401 未经授权的 ActiveMQ REST 管理 API 身份验证 [重复]
【发布时间】:2020-03-20 21:30:58
【问题描述】:

我正在尝试构建一个调用 Jolokia 提供的 ActiveMQ REST 管理 API 的 Python 3 服务,但我收到了 401 Unauthorized 响应。我的猜测是我错误地传递了身份验证数据。不幸的是,ActiveMQ REST documentation 示例与 curlwget 并没有太大帮助。

import urllib.parse
import urllib.request

url = 'http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,service=Health'
data = dict(user='admin', password='admin')
encoded_data = urllib.parse.urlencode(data)
encoded_data = encoded_data.encode('utf-8')
response = urllib.request.urlopen(url, encoded_data)

这是请求后引发的异常:

引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError:HTTP 错误 401:未经授权

成功验证的一种方法是使用 urllib2python2 并在 URL 中传递用户信息,但我想以正确的方式而不是这样:http://admin:admin@localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,service=Health

【问题讨论】:

  • @JustinBertram 对于 localhost 我得到了相同的结果。无论如何,我编辑了问题并将主机更改为localhost
  • @JustinBertram 非常感谢!我从您发布的链接中找到了解决方案。

标签: python-3.x urllib


【解决方案1】:

可能涉及的对象: 由于 ActiveMQ REST 使用的是基本授权,因此解决方案是添加“基本”授权标头和以 base64 编码的登录数据。 这是我的解决方案:

url = 'http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,service=Health'
request = urllib.request.Request(url)
login_data = "{}:{}".format(username, password) # default: login_data = "admin:admin"
urlsafe_encoded_bytes_login_data = base64.urlsafe_b64encode(login_data.encode("utf-8"))
urlsafe_encoded_str_login_data = str(urlsafe_encoded_bytes_login_data, "utf-8")
request.add_header("Authorization", "Basic {}".format(urlsafe_encoded_str_login_data))
result = urllib.request.urlopen(request)
print(result.status)

【讨论】:

    猜你喜欢
    • 2018-07-09
    • 2014-11-16
    • 2016-09-09
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2013-08-09
    • 2017-08-18
    • 1970-01-01
    相关资源
    最近更新 更多