0

私はすでにこのトピックに関連する質問をここで行いましたが、実際には何も役に立ちませんでした。今、私はSOAPについてもう少し知っており、さらに情報を提供することができます。あなたの誰かがなぜそれが機能しないのか良い考えを持っているかもしれないことを願っています。

  1. 外部のWebサービスにアクセスするためにPHPで小さなSoapClientをセットアップしようとしています。
  2. このSoapClientは、プロキシの背後にある私の地元の大学で実行する必要があります。
  3. extern WSDLファイルは、IP-Checkを介して保護されます。

これは私が知っていることです:

$ExternWSDLFile = "http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl";
$LocalUniversityProxy = "proxy.krz.uni-heidelberg.de:8080";

私は常にユーザー/パスワードを介してWSDLにアクセスしようとしましたが、長い間機能しなかったため、ユーザー/パスワードは不要であり、WSDL認証はIPチェックを介してのみ行われると言われました。そのため、以前考えて試したように、SoapClientにユーザーとパスワードの組み合わせを指定する必要はありません。

これは、登録済みのIPアドレスを使用してUniversityComputerから最初に試したものです。

$wsdl = "http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl";    
$Client = new SoapClient($wsdl,array('trace' => 1, 'exception' => 0, 'cache_wsdl' => 0));
$Authentification = $Client->authenticate();
var_dump($Client);
var_dump($Authentification);

それでも機能しませんでしたが、同じコードが外部のプライベートPCから実行されても、少なくともエラーメッセージは表示されませんでしたが、完全に初期化されたSoap-Objectが表示されました。University-PCのこのコードは、次のようなエラーメッセージのみを生成しました。

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl' : failed to load external entity "http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl" in E:\xampp\htdocs\test.php:17 Stack trace: #0 E:\xampp\htdocs\test.php(17): SoapClient->SoapClient('http://search.w...', Array) #1 {main} thrown in E:\xampp\htdocs\test.php on line 17 

したがって、これは、University-Proxyのせいで明らかに壊れました!

次に、WSDLファイルをローカルでフェッチしようとしました。これは、Googleからのチップであることが多いためです。

$auth = base64_encode('KHD\user:pass');
$header = array("Authorization: Basic $auth");
$Proxy = 'proxy.krz.uni-heidelberg.de:8080';
$Context = stream_context_create(array('http' => array('proxy' => $Proxy,'request_fulluri' => True,'header' => $header,),));

$wsdl = file_get_contents("http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl",false,$Context);

$ wsdlでprint_r()を使用すると、ローカルにキャッシュされた正しいWSDLファイルが得られました。しかし、今度はその$ wsdlを使用してSoapClientをセットアップすると、次のメッセージが表示されて再び壊れました。

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from '<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="WOKMWSAuthenticateService" targetNamespace="http://auth.cxf.wokmws.thomsonreuters.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://auth.cxf.wokmws.thomsonreuters.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:types> <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://auth.cxf.wokmws.thomsonreuters.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://auth.cxf.wokmws.thomsonreuters.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xs:element name="authenticate" type="tns:authenticate" /> <xs:element name="authenticateResponse" type="tns:authenticateResponse" /> <xs:element name="closeSession" type="tns:closeSession" /> <xs:ele in E:\xampp\htdocs\test.php on line 12

なぜこれが機能しないのか、私にはまったくわかりません。私は完全にマニュアルに従い、多くのことを試しました。プロキシは私の作業を破壊し続け、プライベート/外部PCでは、IPが一致しないため、このスクリプトは使用できません。

最終的にこの実行を行うために何ができますか?

ご協力いただきありがとうございます!

4

1 に答える 1

0

古いが、他の人のためにここでIDを共有したいと思った。私もその問題に直面しています。PHP 5.0 で修正されたと思われるバグがあったようです。WSDL ファイルはプロキシなしで解析しようとしますが、soap 呼び出しはプロキシを経由します。ここを参照してください: https://bugs.php.net/bug.php?id=29211 - これは非常に面倒です。

于 2013-09-13T17:02:34.910 に答える