2017-12-15 18 views
0

私のルーチンはhttpプロトコルで正常に動作しますが、最近はhttpsにアップグレードする必要があり、動作しなくなりました。私は何が起こっているのか分かりませんし、Web上で多くの異なるコードを試しました。soapclientとhttpsでリクエストを送信できません

エラーメッセージがキャッチされないにSoapFault例外です:[HTTP]ホストに接続できませんでした[...]私はPHPのv.5.6を使用していますが、このソリューションは5.3でも動作するかどうか、それは望ましいだろう

。 37。ここで

が私のコードは、あなたのサーバがopensslライブラリーを持っている場合、

<?php 
error_reporting(E_ERROR | E_PARSE); 
ini_set('display_errors', 1); 
ini_set('soap.wsdl_cache_enabled',0); 
ini_set('soap.wsdl_cache_ttl',0); 
ini_set('default_socket_timeout', 1000); 


$url_wsdl ="https://exampleservice.cls?WSDL=1&CacheUserName=myusername&CachePassword=mypassword&CacheNoRedirect=1"; 


print 'Starting routine'; 
//logging in 
$curl = curl_init($url_wsdl); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_HEADER, 1); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($curl, CURLOPT_SSLVERSION, 3); 


// get cookies 
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches); 
$cookies = array(); 
foreach($matches[1] as $item) { 
    parse_str($item, $cookie); 
    $cookies = array_merge($cookies, $cookie); 
} 
curl_close($curl); 
print 'Curl....ok. Cookies ok<br>'; 


$options = array(
    'trace'    => 1 
    , 'cache_wsdl'  => WSDL_CACHE_NONE 
    , 'user_agent'  => 'PHP WS' 
    , 'ssl_method' => SOAP_SSL_METHOD_SSLv3 

); 

$soapClient = new SoapClient($url_wsdl,$options ); 
print 'SoapClient....ok<br>'; 

//sending cookies to soapclient 
foreach ($cookies as $name => $value) { 
    print '------> sending cookies: '. $value . '<br>'; 
    $soapClient->__setCookie($name, $value); 
} 
print 'SetCookies....ok<br>'; 


$data = array('TesteInterface' => array('Request' => array('Mensagem' => 'teste'))); 
$response = $soapClient->__soapCall("TesteInterface",$data); 
print 'SoapCall....ok<br>'; 

print 'Response:<br>'; 
print_r($response); 


?> 

答えて

0

その後、あなたのwsdl $optionsを向上させることができます。それはno httpsアドレスを指していました。今すぐ動作します

$soapClient->__setLocation('https://myservice.cls'); 
0

最初のチェックを支援するためのおかげで、その後、活性化されるのopenssl PHP拡張のために確認してください。私は手動でエンドポイントを設定することによって、それを考え出した

$options = [ 
      'trace' => 1, 
      'exceptions' => true, 
      'cache_wsdl' => WSDL_CACHE_NONE, 
      'soap_version' => SOAP_1_2, 
      'encoding' => 'UTF-8', 
      'connection_timeout' => 60, //or other 
      'keep_alive' => false, 
      'ssl_method' => SOAP_SSL_METHOD_TLS, //or other 
      'stream_context' => stream_context_create([ 
       'ssl' => [ 
        'verify_peer' => false, 
        'verify_peer_name' => false, 
        'allow_self_signed' => true, 
       ], 
      ]), 
     ]; 
+0

opensslがphpinfo()で有効になっています。私はあなたのコードでオプションのセクションを改善しましたが、まだ動作していません – danielarend

+0

サーバ上のopensslはどうですか?あなたはどのバージョンを持っていますか? – Edwin

+0

openssl v 1.0.2k-fips – danielarend

関連する問題