我正在使用php 5.3.6中的.net网络服务。我使用SoapClient类进行连接。使用" SoapClient :: __ doRequest()继续失败:SSL:由同行重置连接"和" SoapFault对象([message:protected] =>错误获取http标题"。
仅在方法/操作中发生这种情况。如果我使用$ 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:php 5.3.6启用了ssl soap 操作系统:Ubuntu 11.10
答案 0 :(得分: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,));
答案 1 :(得分:0)
似乎SOAP服务器端存在问题。 用于调试SOAP的最佳在线客户端是soapclient 你可以尝试一下。
答案 2 :(得分: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);