5

私はphp 5.3.6で.net Webサービスを利用することに取り組んでいます。SoapClient クラスを使用して接続を確立しています。「 SoapClient::__doRequest(): SSL: Connection reset by peer」および「SoapFault Object ( [message:protected] => Error Fetching http headers 」で失敗し続けます。

これは、メソッド/操作でのみ発生しています。$response = $objClient->__getFunctions(); を使用する場合 それは正常に機能しており、問題なく応答を取得しています。

$objClient = new SoapClient("http://sample.idws.syndication.kbb.com/3.0/VehicleInformationService.svc?wsdl", array('trace' => 1, 'username' => 'xxxxxxx', 'password' => 'xxxxxxx', 'soap_version' => SOAP_1_2, 'exceptions' => true )); 

PHP: SSL SOAP が有効になっている php 5.3.6。
OS: Ubuntu 11.10

4

3 に答える 3

1

過去数か月、同様の問題に直面しています。結局、問題は、wsdl 以外のモード http://php.net/manual/en/soapclient.soapclient.phpを使用したときに 、リモート サーバーが wsdl の場所の要求に応答しないことがあることが判明しました。

初期の非 WSDL モード

    $soapx = new SoapClient(null,
            array(
        "trace" => true,
        'cache_wsdl' => WSDL_CACHE_NONE,
        'location' => 'http://remote_wsdl_url',
        'uri' => 'http://necessary_uri',
        'use' => SOAP_LITERAL,
        'style' => SOAP_DOCUMENT,));

wsdlモードになりました

    $soapx = new SoapClient('http://remote_wsdl_url_turned_to_local',
            array(
        "trace" => true,
        'cache_wsdl' => WSDL_CACHE_NONE,));
于 2015-06-05T12:35:35.450 に答える
0

私は最近、同じ問題のためにこれに出くわしました。私たちにとって問題は、使用されている SSL プロトコルにありました。TLS 1.1 を強制する必要があり、すべてが順調に進み始めました。ここで重要な作業コンポーネントは「crypto_method」です。

$wsdl = 'PATH/TO/WSDL';
$url = 'http://URL_TO_SOAP_SERVICE';
$cert = 'PATH/TO/CLIENT/CERT';

$context = stream_context_create([
    'ssl' => [
        'crypto_method' =>  STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT,
        'verify_peer' => true,
        'verify_peer_name' => true,
        'allow_self_signed' => false,
        'cafile' => '/path/to/cafile.selfsigned'
    ]
]);

$params = [
    'location' => $url,
    'local_cert' => $cert,
    'trace' => true,
    'exceptions' => true,
    'verifypeer' => true,
    'verifyhost' => true,
    'allow_self_signed' => false,
    'connection_timeout' => 180,
    'keep_alive' => false,
    'stream_context' => $context
];

$client = new SoapClient($wsdl, $params);
于 2017-11-01T19:17:29.113 に答える