python - 使用 python 请求通过用户服务插件在 openfire 中创建新用户

标签 python python-requests openfire

我正在尝试编写一个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/

相关文章:

python - PyQt 工具栏默认位于第二行

Python请求: Anyway to download just the body of a get response?

python - 为什么一个网站的 HTML 和 Python 的请求库给的 HTML 不一样?

python - Google Oauth Python 请求 : Method Not Allowed

Python - 计算现在的时间是否在两次之间

python - 由于robots.txt, Mechanize 得到403错误,但robots.txt没有阻止

java - 使用 Java 在 XMPP 服务器中创建新用户

java - 构建 openfire 源的问题

python - 预期出现缩进 block python 错误

ios - 用于聊天并同步到其他设备的第 3 方库