SoapClient不尊重no_proxy排除

时间:2012-07-23 15:08:46

标签: php linux soap proxy

在wsdl模式下运行的SoapClient不支持操作系统代理排除,并且似乎没有标记可以直接添加它们。

当架构定义引用内部和外部定义的架构时,这会带来困难。 对于测试,我已将最初的wsdl文档拉到本地。我已经启用代理作为模式引用w3.org和一些其他基于Internet的模式定义。问题是本地文档仍然引用代理的内部和外部资源,一旦我启用代理,它就希望通过它发送每个请求。

我有以下代码:

$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 ...

我当然更改了名称以保护我的客户端,但我的no_proxy列表中确实有localdomain.com:

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规则?

1 个答案:

答案 0 :(得分:0)

我最终将内部所有模式拉出来并修改所有这些模式以指向本地定义的模式。