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