PHP调用AzerothCore世界服务端SOAP接口获取响应失败咨询
问题排查与解决方案
核心根因
你遇到的瞬间返回Error Fetching http headers报错的核心原因是容器内SOAP服务的绑定地址配置错误:
你在worldserver.conf中将SOAP.IP设为了127.0.0.1,这是容器内部的环回地址,仅允许容器内的程序访问。宿主机请求经过Docker端口转发后,无法路由到容器内绑定到127.0.0.1的SOAP服务,所以TCP连接能建立(不会报无法连接主机错误),但请求发送后会被直接拒绝,触发获取HTTP头失败的报错。
验证步骤
你可以通过以下操作确认根因:
- 进入运行中的worldserver容器,执行如下命令,验证容器内SOAP服务本身正常:
curl -u acore:password -d '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:AC"><soap:Body><urn:executeCommand><command>.server info</command></urn:executeCommand></soap:Body></soap:Envelope>' -H "Content-Type: text/xml" http://127.0.0.1:7878
正常情况会返回.server info命令的执行结果。
修复方案
- 修改
worldserver.conf配置文件,将SOAP绑定地址改为允许所有来源访问:
# 原配置 # SOAP.IP = "127.0.0.1" # 修改后配置 SOAP.IP = "0.0.0.0"
- 重启worldserver容器使配置生效。
- (可选)如果修改后仍有报错,可以先删除PHP SoapClient配置中的
compression参数,部分版本的AzerothCore未开启SOAP压缩支持,会导致请求被拒绝。 - (可选)如果返回权限错误,进入worldserver控制台执行如下命令,给调用账号授予最高GM权限:
account set gmlevel acore 3 -1
修改完成后重新运行你的PHP脚本,即可正常获取SOAP接口返回结果。
内容的提问来源于stack exchange,提问作者DanT
相关产品推荐
相关产品推荐

