ホームページ >バックエンド開発 >PHPチュートリアル >SoapClient 1.2 バージョンは、エラーやリターンなしで Web サービスにアクセスします。何が起こっていますか?

SoapClient 1.2 バージョンは、エラーやリターンなしで Web サービスにアクセスします。何が起こっていますか?

WBOY
WBOYオリジナル
2016-06-23 13:32:571439ブラウズ

最近、PHP 経由で .net Web サービスにアクセスする必要があります。 コードは次のとおりです:
$client = new SoapClient("https://myurl.svc?wsdl",array('soap_version'=> SOAP_1_1,'trace) ' => TRUE、'例外' => FALSE));
$header = new SoapHeader("https://myurl.svc", "認証", serName'=>$username,'Password'=> ; $password), false);
$client->setSoapHeaders(array($header));
$client->GetVersion();// これは Webservice のメソッドです
エラー:
PHP 致命的なエラー: キャッチされませんSoapFault 例外: [HTTP] コンテンツ タイプ 'text/xml; charset=utf-8' が予期されたタイプ 'application/soap+xml' ではないため、メッセージを処理できません

いくつかの情報を確認した後、デフォルトでは、PHPのsoapclientはバージョン1.1で送信されるので、content_typeが「text/xml」になっているので、バージョン1.2に変更します
content_typeは「application/soap+xml」なので、次のように変更します
$client = new SoapClient("https:// myurl.svc?wsdl",array('soap_version'=> SOAP_1_2,'trace' => TRUE,'例外' => FALSE)); しかし、実行を変更した後、リターンまたはエラーがなく、実行に時間がかかります。後でタイムアウトが要求されます。
理由はわかりません。
ご回答いただきました皆様、誠にありがとうございます。


ディスカッションに返信(解決策)

指定したアドレスにアクセスできないため、WSDL に何が記載されているかを知ることができません

もちろん、ユーザーの認証に使用される SoapHeader パラメーターは WSDL には表示されません
あなたサービスプロバイダーに連絡して、SoapHeader のパラメーターが正しいかどうかを確認してください
xuzuning モデレーター、ご返信いただきありがとうございます。テストしたとき、アクセス可能なアドレスを使用したため、残りは SoapHeader のみにすることができます。 . パラメータに問題があり、WebサービスのSSL検証に失敗した場合、検証失敗などのメッセージは表示されません。サービスプロバイダーに連絡するのが困難です。ユーザー名とパスワードによる https 認証は一般的にどのように記述されますか?次の記述はどのように修正できますか?

$header = new SoapHeader("https://myurl.svc", "Authentication", \ >$password), false);

$client-> ;__setSoapHeaders(array($header));パラメーターが正しい限り、これは正しいです

確認済み、ユーザー名とパスワードの値は問題ありませんが、ユーザー名にスペースや「 」などの文字が含まれています。その前に処理する必要があるのか​​な普通に伝わるでしょうか?対処が必要な場合、どのように対処すればよいのでしょうか?

以下の角括弧内の値はユーザー名の値です

[abcdefg||Thu, 14 Mar 2013 02:30:09 GMT]

ユーザー名はいつでも変更されますか?

はい、パスワードは常に変更されます。時間が検証される場合、許容範囲は数分です。

代わりに CURL アクセスを使用してみますが、パラメータの渡し方が間違っているかどうかはわかりません。エラー メッセージとコードは次のとおりです。
====エラー メッセージ======
Take 1.530147 https://****.svc?wsdl にリクエストを送信するまでの秒数
tuData
http://www.w3.org/2005/08/addressing/soap/faults:Sendera:BadContextToken セキュリティ コンテキスト トークンの有効期限が切れているか、メッセージは無効です。
====Code====
$data = "



$tuCurl =curl_init();
curl_setopt; ($tuC URL, CURLOPT_URL, "https://****.svc?wsdl");
$curlPost="ユーザー名=" . $password($tuCurl, CURLOPT_POST) , 1);
curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($tuCurl) 、CURLOPT_POSTFIELDS、$data );
curl_setopt($tuCurl, CURLOPT_HTTPHEADER , array("Content-Type: application/soap+xml; charset=utf-8"));
$tuData =curl_exec($tuCurl);
if(!curl_errno($tuCurl); {
$info =curl_getinfo( $tuCurl);
echo ' . $info['total_time'] . ' にリクエストを送信します
} else { 'Curlエラー: ' .curl_error($ tuCurl);
curl_close($tuCurl);
print_r($tuData); 誰かこれについて経験がありますか?いくつかヒントを与えても大丈夫です。 。 。よろしくお願いします

PHPのsoapclientはsoap 1.2をサポートできますか?バージョン 1.2 を指定した後、soapclient がフィードバックを要求しないのはなぜですか?

元の投稿者、私もこの問題に遭遇しました

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。