2012-07-23 76 views
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规则?

回答

0

我结束了所有的模式内部并修改所有这些模式也指向本地定义的模式。