我正在尝试编写一个Python程序,它将向openfire服务器添加一个新用户。我已启用用户服务请求和 http basic auth 。 我收到 401 响应。这是我的代码
import requests
from requests.auth import HTTPDigestAuth
def add_controller(name,password):
xml = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<username>""" + name + """</username>
<password>""" + password + """<password>
</user>"""
headers = {'Content-Type': 'application/xml','Authorization':'Basic YWRtaW46MTIzNDU='}
r = requests.post(url='http://192.168.200.115:9090/plugins/userService/users', data=xml, headers=headers ,auth=HTTPDigestAuth('admin','admin'))
print r
add_controller("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="384c5d4b4c785d40595548545d165b5755" rel="noreferrer noopener nofollow">[email protected]</a>","test")
最佳答案
您不应设置两个 Authorization
header 。您可以执行基本或摘要授权,auth
参数可以处理其中任何一个。选择其中之一。
使用基本身份验证:
headers = {'Content-Type': 'application/xml'}
r = requests.post(
url='http://192.168.200.115:9090/plugins/userService/users',
data=xml, headers=headers,
auth=('admin', '12345'))
或使用摘要身份验证:
headers = {'Content-Type': 'application/xml'}
r = requests.post(
url='http://192.168.200.115:9090/plugins/userService/users',
data=xml, headers=headers,
auth=HTTPDigestAuth('admin', '12345'))
请参阅dedicated Authentication chapter文档。
Openfire user service endpoint应该可以很好地使用基本身份验证选项。
您可以使用模板更轻松地创建 XML 文档,并且您确实应该使用 xml.sax.saxutils.escape()
function确保您的数据适合包含在文档中:
from xml.sax.saxutils import escape
xml = """\
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<username>{}</username>
<password>{}<password>
</user>""".format(escape(name), escape(password))
关于python - 使用 python 请求通过用户服务插件在 openfire 中创建新用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29310297/