使用Zeep构建Python SOAP客户端遇403禁止访问错误求助
解决Zeep SOAP客户端403 Forbidden (Forbidden port)错误
我来帮你分析下这个问题——你碰到的403错误明确标注了“Forbidden port”,这说明服务器端或者中间的网络防火墙禁止通过7104端口访问目标SOAP服务,和认证方式的关系不大,下面是几个具体的排查和解决方向:
1. 确认目标服务的端口正确性
首先先核实:你要访问的SOAP服务是不是确实监听在7104端口?有时候可能是端口号记错了,或者服务近期更换了端口。可以联系服务提供商、查看官方文档,或者用curl http://url:7104这类命令测试端口连通性,确认端口是否可用。
2. 排查网络防火墙/代理限制
- 如果是在公司内网环境下,绝大多数企业防火墙会拦截非标准端口(7104不属于HTTP/80、HTTPS/443这类通用端口),这种情况你需要联系IT部门申请开通7104端口的访问权限。
- 如果你使用了代理服务器,要确保代理配置允许转发7104端口的请求,同时要把代理信息正确配置到Zeep的Transport会话中:
session = Session() session.proxies = { 'http': 'http://your-proxy:port', 'https': 'http://your-proxy:port', } session.auth = HTTPBasicAuth('usrname', 'pass') transport_with_basic_auth = Transport(session=session)
3. 尝试切换到标准端口(若可行)
如果服务提供商支持,询问是否可以使用80(HTTP)或443(HTTPS)这类标准端口访问服务,这些端口一般不会被防火墙拦截,能直接避开端口限制问题。
4. 修复本地WSDL文件的依赖引用
你在带认证的代码里使用了本地WSDL文件,但错误日志显示Zeep仍在访问http://url:7104,这说明本地WSDL文件中包含了指向远程7104端口的import语句,Zeep解析WSDL时会自动加载这些依赖的schema文件,从而触发端口错误。解决方法:
- 把WSDL中所有import的远程地址替换成本地文件路径(比如把
http://url:7104/schema.xsd改成file://C:/path/to/local/schema.xsd) - 确保所有依赖的schema文件都已经下载到本地,和WSDL文件放在同一目录或者路径正确引用
调整后的本地WSDL使用示例:
from zeep import Client from requests import Session from requests.auth import HTTPBasicAuth from zeep.transports import Transport # 确保本地WSDL及所有依赖schema都已下载,且import路径为本地 client_location = "file://C:/full/path/to/your/local/service.wsdl" session = Session() session.auth = HTTPBasicAuth('usrname', 'pass') transport_with_basic_auth = Transport(session=session) client = Client(wsdl=client_location, transport=transport_with_basic_auth)
内容的提问来源于stack exchange,提问作者cyberbemon
相关产品推荐
相关产品推荐

