この問題は一日中私を殺してきました。
基本HTTP認証を使用するクライアントWebサービスhttps:// * .asmx?WSDLがあります。
SoapUIを使用してWebサービスに接続すると、すべてがエラーなしで完全に機能します。
問題は、PHPに切り替えるときです...
なんとか接続でき、php用のsoapclient拡張機能を使用してサーバーから関数リストを取得できます(PHP 5.3.0を使用しています)。
PHP用のsoapclient拡張機能を使用して関数を呼び出そうとすると、次のエラーが発生します。
致命的なエラー:キャッチされないSoapFault例外:[HTTP] C:\ www \ xpto_Atestes \ soapclient.php:26スタックトレースのhttpヘッダーのフェッチエラー:#0 [内部関数]:> SoapClient-> __ doRequest(' * ** .. .. '、' http:// * *** ...'、1、0)#1> C:\ www \ xpto_Atestes \ soapclient.php(26):SoapClient-> __ soapCall(' login'、Array)#2 {main}> 26行目のC:\ www \ xpto_Atestes\soapclient.phpにスローされます
より明確なエラー(呼び出しの結果のprint_rを実行する場合):
[faultstring]=>httpヘッダーのフェッチ中にエラーが
発生しました[faultcode]=>HTTP
次のヘッダーが送信されます。
POST / * .asmx HTTP / 1.1ホスト:* .pt接続:Keep-Aliveユーザーエージェント:> PHP-SOAP / 5.3.0コンテンツタイプ:text / xml; charset = utf-8 SOAPAction: "http:// * * / Login"> Content-Length:264認証:基本AUTHSECRETPASS
私はそれをこのように呼んでいます:
$ soapParams = array('login' =>'HTTP_LOGIN'、
'password' =>'HTTP_PASS'、
'authentication' => SOAP_AUTHENTICATION_BASIC、
'trace' => 1、
'exceptions' => 0
);
$ client = new SoapClient( "https:// * *** .asmx?WSDL"、$ soapParams); echo"接続済み
"; $ params = array('account' =>''、'msisdn' =>'NUMBER'、'password' =>'PASSWORD'); $ result = $ client-> __ soapCall( "login"、$ params);
しばらくグーグルして問題が何であるかを見つけようとした後、私はnusoapに切り替えました..私の悲惨なことにそれはまたエラーを与えました:
エラー
HTTPエラー:ヘッダーのソケット読み取りがタイムアウトしました
リクエスト
POST / * * .asmx HTTP / 1.0ホスト:* .ptユーザーエージェント:NuSOAP / 0.9.5(1.123)コンテンツタイプ:text / xml; charset = ISO-8859-1 SOAPAction: "http:// * *** / Login"認証:基本AUTHSECRETPASSコンテンツ-長さ:481
NUMBERPASSWORD
応答
私はそれをこのように呼んでいます:
$ client = new nusoap_client( "https:// * * .asmx?WSDL"、true);
$ client-> setCredentials('HTTPUSER'、'HTTPPASS'、'basic');
$ params = array('account' =>''、'msisdn' =>'NUMBER'、'password' =>'PASSWORD');
$ result = $ client-> call('Login'、$ params);
nusoapを使用して、curl拡張機能を有効にして呼び出しを行うことも試みました。
$ client-> setUseCurl(true);
しかし、そのような運はありません、それはエラーを出し続けました:
HTTPエラー:cURLエラー:56:ピアURLからデータを受信する際の失敗:http:// * ** * ** * ** .asmx
content_type:
http_code:0
header_size:0
request_size:750
filetime:-1
ssl_verify_result:0
redirect_count:0
total_time:21.015
namelookup_time:0
connect_time: 0 pretransfer_time
:0
size_upload:462
size_download:0
speed_download:0
speed_upload:21
download_content_length:-1
upload_content_length:-1
starttransfer_time:0
redirect_time:0
Webサービスに問題はないと100%確信しています。問題なく、SoapUIから呼び出すことができれば、PHPから呼び出せない理由がわかりません。
ラリーはこれ以上何ができるのかわからない…全部やってみたと思う…
編集:PHP用の別のSoap Classを試しましたが、今回はZendからです。
結果は次のとおりです。
致命的なエラー:キャッチされないSoapFault例外:[WSDL] SOAP-エラー:WSDLの解析:「https:// * * .asmx?WSDL」からロードできませんでした:外部エンティティ「https:// * .asmx?WSDL 」のロードに失敗しました"C:\ www \ xpto_Atestes \ Zend \ SOAP \ Client \ Common.php:51スタックトレース:
#0 C:\ www \ xpto_Atestes \ Zend \ SOAP \ Client \ Common.php(51):SoapClient-> SoapClient( 'https:// * * ...'、Array)
#1 C:\ www ** * * _Atestes \ Zend \ SOAP \ Client.php(1032):Zend_Soap_Client_Common-> __ Construct(Array、'https:// * * ...'、Array)
#2 C:\ www ** ** _Atestes \ Zend \ SOAP \ Client.php(1188):Zend_Soap_Client-> _ initSoapClientObject()
#3 C:\ www ** *_Atestes \ Zend \ Soap \ Client.php(1112):Zend_Soap_Client-> getSoapClient()#4 [内部関数]:Zend_Soap_Client-> __ call('Login'、Array)
#5 C:\ www ** ** _Atestes \ zend .php(28):Zend_Soap_Client-> Login(Array)
#6{main}がスローされます