短縮版
SoapClient
WSDLにアクセスするときに内部的にこれを行うように拡張したい:
curl -L -E /location/of/cert.pem -c /tmp/location/of/cookie.jar https://web-service-provider/servicename?wsdl
ロングバージョン
次のような SOAP リクエストがあります。
$serviceUrl = 'https://service-url';
$wsdl = $serviceUrl . '?wsdl';
$proxyServiceUrl = 'http://localhost/myproxy.php?url=$serviceUrl';
$proxyWsdl = 'http://localhost/myproxy.php?url=$wsdl';
$options = array(
'cache_wsdl' => WSDL_CACHE_NONE,
'encoding' => 'utf-8',
'soap_version' => SOAP_1_1,
'exceptions' => true,
'trace' => true,
'location' => $proxyServiceUrl
);
$client = new SoapClient($proxyWsdl, $options);
$params = array( /* */ );
$client->someOperation($params);
ご覧のとおり、プロキシ ビットを除いて、すべてがかなり標準的です。
代理の理由
WSDL を含むすべてのエンドポイントが siteminder と呼ばれる認証システムを介して処理されるという Web サービス プロバイダーの要件を満たすために、プロキシを作成しました。
プロキシの機能は非常に簡単です。Linux コマンド ライン curl で記述した場合、次のようになります。
curl -L -E /location/of/cert.pem -c /tmp/location/of/cookie.jar https://web-service-provider/servicename?wsdl
正確には:
* Follow all redirections
* specify location of .pem file (and password)
* specify location of cookie jar
これはすべて正常に動作します:)
しかし最近、サービス プロバイダーは WSDL を変更することを決定しました。
スキーマ ファイル ( .xsd
) をインポートするようになりました。これは、WSDL に関連していることを除けば、それほど悪いことではありません。
WSDL ファイルに相対的であることは、SoapClient
パーサーがプロキシの場所からスキーマ ファイルを探すようになったことを意味します。エラー、見つかりません!
その問題の詳細については、次を参照してください。
相対パス スキーマを使用して wsdl を渡すと、php SoapClient が失敗する
だから私の質問は:
どうすれば書き直すことができますかSoapClient
(もちろんそれを拡張することによって)、引き続き siteminder 認証を通過しますが、その追加のプロキシを通過する必要はありませんか?
私の最初の考えは、どういうわけか URI アクセサー関数 (存在する場合) を書き直さなければならないということですが、この分野のドキュメントがあまりないため、どこから始めればよいかわかりません。
SoapServer
あるいは、何らかの方法でハッキングする必要があるかもしれません。
の内部へのドキュメントへのポインタを含め、私が得ることができる助けをいただければ幸いですSoapClient
。