PHP7 cURL 和 SOAP 请求 SSL 失败



我在带有ubuntu 16.04的流浪虚拟机中使用PHP 7.0.25

我需要向这个 SOAP API 发出请求: https://ws.ocasa.com/testecommerce/service.asmx?wsdl

php curl 和 SoapClient 都失败了

使用SoapClient,我正在这样做(也尝试过根本没有任何选项,只有cache_wsdl部分):

$options = array(
'cache_wsdl' => 0,
'trace' => 1,
'stream_context' => stream_context_create(array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
))
);
$wsdl = 'https://ws.ocasa.com/testecommerce/service.asmx?wsdl';
$client = new SoapClient( $wsdl, $options);

给我这个错误:

[SoapFault]
SOAP-ERROR: 解析 WSDL: 无法从 加载 "https://ws.ocasa.com/testecommerce/service.asmx?wsdl":未能 加载外部实体"https:
//ws.ocasa.com/testecommerce/service.asmx?wsdl">

使用 php curl 我最终收到此错误:

与 ws.ocasa.com:443 相关的未知 SSL 协议错误

我无法毫无问题地从 linux curl 命令行获取页面(当然是从 VM 内部)

curl -I https://ws.ocasa.com/testecommerce/service.asmx?wsdl -v

SSL 连接使用的是 TLS1.0/RSA_3DES_EDE_CBC_SHA1

我测试了添加

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

并且还尝试添加CA证书:(也尝试将它们添加到php.ini)

curl_setopt($ch, CURLOPT_CAINFO, '/vagrant/cacert.pem');

非常奇怪的是,我可以毫无问题地卷曲其他一些https网站 secure.php.net 例如usgin php curl。

此外,没有"http"版本可用于摆脱整个SSL问题。

有什么想法吗?也许我缺少一些依赖性?已安装 OpenSSL。

谢谢你的时间。

好吧,我有点找到了解决方案...

带卷曲(CURLOPT_SSLVERSION与众不同)

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $wsdl);
curl_setopt($ch, CURLOPT_POSTFIELDS,  $xml); // $xml is the envelope (string)
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);

我无法使SoapClient工作,即使使用SOAP_SSL_METHOD_TLS选项。 我会将其标记为已解决,但如果有人找到如何使其与 SoapClient 一起工作,那将是真正的答案。

这有助于我提出请求(不是 ssl 部分)

相关内容

  • 没有找到相关文章

最新更新