2017-07-17 5 views
0

私は、WSDLを介して別のサーバー(#2)と石鹸で通信しているLAMPサーバー(#1)を持っています。サーバー1のコマンドラインでサーバー2のURLにcurl呼び出しを発行すると、正常に動作して適切なWSDL応答が得られますが、同じURLへのPHP soapclientが「外部エンティティーのロードに失敗しました」というエラーが発生します。以前はサーバー2で自己署名入りの証明書を持っていましたが、CA証明書にアップグレードした時点で作業をやめました。php SoapClientの接続に失敗しましたが、コマンドラインのcurl呼び出しが機能します

面白いことに、このサーバーは別の場所(別のOS、同じPHPコード/データベース)の別のサーバーと負荷分散されており、2番目のサーバーには全く問題はありません。ここで

は、私は石鹸のクライアントのために使用していますコードです:それはファイアウォールの問題ではありませんので

function getSoapClient(){ 
ini_set("soap.wsdl_cache_enabled", 0); 
    // standard soap client for application service 
    $post_url = lum_getString("[CAMPAIGN_POST_URL]"). 
     "?enterprise=".lum_getString("[CAMPAIGN_ENTERPRISE]"). 
     "&company=".lum_getString("[CAMPAIGN_COMPANY]"); 
    $options = array(
     'trace' => true, 
     'cache_wsdl' => WSDL_CACHE_NONE, 
     'exceptions' => 1, 
     'verifypeer' => false, 
     'verifyhost' => false, 
     'allow_self_signed' => true, 
     'login' => lum_getString("[CAMPAIGN_POST_ID]"), 
     'password' => lum_getString("[CAMPAIGN_POST_LC]"), 
    ); 
    $context = stream_context_create(
     array(
      'user_agent' => 'PHPSoapClient', 
      'ssl' => array(
       'verify_peer' => false, 
       'allow_self_signed' => true, 
      ), 
      'https' => array(
       'curl_verify_ssl_peer' => false, 
       'curl_verify_ssl_host' => false, 
      ) 
     ) 
    ); 
    $options['stream_context'] = $context; 

    $client = new SoapClient($post_url."&wsdl",$options); 

    return $client; 
} 

カールとのSoapClientは、同じポートを使用しています。

問題を特定したり、何が間違っているのかを助けたりするのに役立ちます。

+0

作業負荷分散マシンと壊れたクライアントサーバ#1の間でopensslのバージョンが一致していることを確認し、壊れたサーバ#1をバージョン1.01にダウングレードして影響を与えません。 – user3303872

答えて

0

ファイアウォールの問題として表示されます。私はサーバー1からサーバー2へのすべてのアクセスを開いて、物事が働き始めました。問題が何であったかはあまり分かりません。私はログインとパスワードだけにオプションを減らしましたが、それはまだ動作しています。ファイアウォールはしばしば答えです。

ファイアウォール、正しいポート、およびなぜそれが動作していなかったのかについてのアイデアは非常に高く評価されています。

なぜcURLが動作し、SOAPが動作していないのですか?

関連する問題