我在使用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已安装。
感谢您的时间。
答案 0 :(得分:0)
好吧,我找到了一个解决方案......
使用curl( 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);
即使使用SOAP_SSL_METHOD_TLS选项,我也无法使SoapClient正常工作。 我将其标记为已解决,但如果有人发现如何使其与SoapClient一起使用,那将是真正的答案。
This帮助我完成了请求(不是ssl部分)