0
在wsdl模式下運行的SoapClient不支持OS代理排除,並且似乎沒有標記直接添加它們。SoapClient不遵守no_proxy排除規則
當模式定義引用內部和外部定義的模式時,這會造成困難。 對於測試,我已經將本地最初的wsdl文檔拉出來了。我已經啓用代理作爲模式引用w3.org和其他一些基於互聯網的模式定義。問題是本地文檔仍然引用代理的內部和外部資源,並且一旦啓用代理,它就希望通過它發送每個請求。
我有以下代碼:
$client = new SoapClient('SomeResource.wsdl',array(
'proxy_host'=>'10.0.0.1',
'proxy_port'=>8080,
'soap_version'=>SOAP_1_1,
'exceptions'=>true,
'trace'=>1,
'cache_wsdl'=>WSDL_CACHE_NONE,
'login'=>'username',
'password'=>'password'
));
在後臺運行strace:
stat("http://localresource.localdomain.com:1080/some/version/Common.xsd", 0x7fffd94a36d0) = -1 ENOENT (No such file or directory)
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 7
fcntl(7, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(7, F_SETFL, O_RDWR|O_NONBLOCK) = 0
connect(7, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("10.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
... timeout here cause it's a local resource ...
我當然有改變了名字,以保護我的客戶,但我有localdomain.com在我的名單NO_PROXY :
somehost:someuser> env |grep proxy
http_proxy=http://10.0.0.1:8080
ftp_proxy=http://10.0.0.1:8080
https_proxy=http://10.0.0.1:8080
no_proxy=localdomain.com,localhost,127.0.0.1
將no_proxy添加到SoapClient輸入無效。
缺少拉內部所有模式和修改所有這些引用也指向本地定義的資源,有沒有什麼辦法讓SoapClient遵守no_proxy規則?