0

wsdlモードで実行されているSoapClientは、OSプロキシの除外を尊重せず、それらを直接追加するためのフラグを持っていないようです。

これは、スキーマ定義が内部定義スキーマと外部定義スキーマの両方を参照する場合に問題を引き起こします。テストのために、最初の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 ...

もちろん、クライアントを保護するために名前を変更しましたが、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

SoapClient入力にno_proxyを追加しても効果はありません。

内部のすべてのスキーマをプルし、それらのすべての参照を変更して、ローカルで定義されたリソースも指すようにする以外に、SoapClientにno_proxyルールを尊重させる方法はありますか?

4

1 に答える 1

0

最終的に、すべてのスキーマを内部にプルし、それらすべてのスキーマを変更して、ローカルで定義されたスキーマも指すようにしました。

于 2012-09-07T00:50:29.810 に答える