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



我正在尝试编写一个python程序,该程序将向openfire服务器添加一个新用户。我已经启用了用户服务请求和http基本身份验证。我收到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("test@example.com","test")

您不应该设置两个Authorization标头。您可以执行基本摘要式授权,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'))

请参阅文档中专门的身份验证一章。

Openfire用户服务端点应该可以很好地使用基本的auth选项。

使用模板可以更容易地创建XML文档,并且应该真正使用xml.sax.saxutils.escape()函数来确保您的数据适合包含在文档中:

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))

这是我将来参考的,openfire需要授权头。我的工作代码如下,它添加了带有密码的测试用户作为测试

import requests 
from xml.sax.saxutils import escape
def add_controller(name,password):
    xml = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
    <username>{}</username>
    <password>{}</password>
</user>""".format(escape(name), escape(password))
    headers = {'Content-Type': 'application/xml','Authorization': 'Basic YWRtaW46MTIzNDU='}
    r = requests.post(
        url='http://192.168.200.105:9090/plugins/userService/users',
        data=xml, headers=headers, 
        auth=('admin', 'admin')
    )
    print r 
add_controller("test","test")

最新更新