You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python requests调用Ejabberd管理API返回401错误 Postman调用正常

问题根因

你返回401是两个低级错误导致的,和ejabberd权限配置无关:

  • 端口和协议不匹配:你的ejabberd配置里5443端口明确开启了tls: true,是HTTPS协议端口,你代码里用http://前缀请求这个端口,请求无法完成正常TLS握手,服务端根本收不到你传的Basic认证头。
  • SSL校验配置不一致:你Postman里关了SSL证书校验,但requests请求里没加verify=False参数,就算把URL改成HTTPS,也会因为自签名证书校验失败被拦截。
  • 补充:你配置里5281端口是绑定本地回环地址的无TLS HTTP API端口,本地调试用这个端口不需要处理证书问题,更方便。
修复方法

二选一即可:

方法1:沿用5443端口

把URL改成HTTPS协议,加上verify=False参数对齐Postman的配置:

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

import requests
from requests.auth import HTTPBasicAuth

url = "https://localhost:5443/api/register"
data = {
    "user": "testuser2",
    "host": "localhost",
    "password": "password"
}

res = requests.post(url, json=data, auth=HTTPBasicAuth("admin", "root"), verify=False)
print(res.status_code, res.text)

方法2:换用本地HTTP API端口

直接用监听127.0.0.1的5281端口,不需要HTTPS、不需要关证书警告:

import requests
from requests.auth import HTTPBasicAuth

url = "http://127.0.0.1:5281/api/register"
data = {
    "user": "testuser2",
    "host": "localhost",
    "password": "password"
}

res = requests.post(url, json=data, auth=HTTPBasicAuth("admin", "root"))
print(res.status_code, res.text)
排错提示

如果改完还是报错,先进ejabberd容器执行ejabberdctl register admin localhost 你的密码重置admin账号密码,确认凭据正确后再测试。

内容的提问来源于stack exchange,提问作者rangarajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:36:29