我有这个奇怪的python suds 案例场景。
我有一个在本地 IP 上运行的肥皂服务(java),比如说http://10.0.0.1:8080/services/
我在本地网络中使用 suds http base auth,它工作正常。
from suds.client import Client
c = Client(url, username="user", password="pass")
但我想让它从外部访问,所以我问系统管理员:“你能为这个肥皂服务设置一个外部 IP 使用反向代理吗”
“是的,但是公司防火墙不允许使用 8080 端口,所以你的规则是:
http://10.0.0.1:8080/services/*
<->https://example.com/services/*
然后设置了规则,但我无法让客户端工作。我尝试了各种交通工具:
from suds.transport.https import WindowsHttpAuthenticated
from suds.transport.http import HttpAuthenticated
#from suds.transport.https import HttpAuthenticated
from suds.client import Client
http = HttpAuthenticated(username="jlee", password="jlee")
#https = HttpAuthenticated(username="jlee", password="jlee")
ntlm = WindowsHttpAuthenticated(username="jlee", password="jlee")
url = "https://example.com/services/SiteManager?wsdl"
c = Client(url, transport = http)
它总是返回:
suds.transport.TransportError: HTTP Error 403: Forbidden ( The server denied the specified Uniform Resource Locator (URL). Contact the server administrator. )
我试图https://example.com/services/SiteManager?wsdl
从 chrome 访问 URL,它也返回 403!
但是,如果我首先使用其他路由登录(我的服务器在 tomcat 上运行其他 http 页面),然后再次访问该 URL,则会显示 wsdl desc 页面!
谁能告诉我这有什么问题?是否与反向代理服务器或 suds 传输的配置有关?
非常感谢!杰基