从开发机器(mac)开始,没有问题通过PHP中的cURL连接到此,但在Ubuntu中,我收到此错误。我已尝试在本地计算机和Amazon AWS实例上。我用Google搜索并用Google搜索并继续前往砖墙。没有防火墙限制,这是一个完整的谜。 php5-curl IS安装在ubuntu中,我只是没有任何想法。我运行了这个命令:
curl -v https://api.rkd.reuters.com/api/2006/05/01/TokenManagement_1.svc/Anonymous
得到了这个输出,没有任何解决方案的线索。还安装了OpenSSL。
* About to connect() to api.rkd.reuters.com port 443 (#0)
* Trying 159.220.40.240... connected
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to api.rkd.reuters.com:443
* Closing connection #0
curl: (35) Unknown SSL protocol error in connection to api.rkd.reuters.com:443
欢迎任何想法
答案 0 :(得分:8)
我遇到了这个问题,我通过将curl SSL版本设置为版本3来修复它
curl_setopt($ch, CURLOPT_SSLVERSION,3);
显然服务器开始要求SSL版本3,此设置导致cURL与SSL重新开始工作。
答案 1 :(得分:1)
修正了它!这是Ubuntu 12.04的一个已知问题
这些说明
- 取消它,它只是禁用了异常,这仍然无效!帮助!
- 编辑 - 这就是我最终如何解决它的问题!
我从5.4.3升级到PHP 5.5并在我的调用中设置了以下选项,修复了它:
$options = array('ssl_method' => SOAP_SSL_METHOD_SSLv3,'soap_version' => SOAP_1_2);
$sc = new SoapClient('https://my-url.com/call/', $options);
升级是必要的,因为PHP版本中不存在常量SOAP_SSL_METHOD_SSLv3< 5.5,不幸的是Ubuntu Server当时只允许通过apt-get update php5升级到5.4.3。我手动安装了更高版本,现在工作正常。
答案 2 :(得分:0)
我遇到了同样的问题,不幸的是主机不愿意升级到php 5.5。
我通过创建一个扩展php的SoapClient以使用cURL的新类来解决它:
/**
* New SoapClient class.
* This extends php's SoapClient,
* overriding __doRequest to use cURL to send the SOAP request.
*/
class SoapClientCurl extends SoapClient {
public function __doRequest($request, $location, $action, $version, $one_way = NULL) {
$soap_request = $request;
$header = array(
'Content-type: application/soap+xml; charset=utf-8',
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: \"$action\"",
"Content-length: " . strlen($soap_request),
);
$soap_do = curl_init();
$url = $location;
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => FALSE,
//CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_RETURNTRANSFER => TRUE,
//CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_POST => TRUE,
CURLOPT_URL => $url,
CURLOPT_POSTFIELDS => $soap_request,
CURLOPT_HTTPHEADER => $header,
CURLOPT_FAILONERROR => TRUE,
CURLOPT_SSLVERSION => 3,
);
curl_setopt_array($soap_do, $options);
$output = curl_exec($soap_do);
if ($output === FALSE) {
$err = 'Curl error: ' . curl_error($soap_do);
}
else {
///Operation completed successfully
}
curl_close($soap_do);
// Uncomment the following line to let the parent handle the request.
//return parent::__doRequest($request, $location, $action, $version);
return $output;
}
}
答案 3 :(得分:0)
错误:CURL错误:35 - 与httpapi.com:443(IP:162.x.x.x& 204.x.x.x)连接的OpenSSL SSL_connect:SSL_ERROR_SYSCALL
加入WHMCS:
您可以与您的主机联系,将其末端的IP地址列入白名单,以使用其API。
答案 4 :(得分:0)
通过在curl.exe旁边的文件夹中添加curl-ca-bundle.crt来解决
答案 5 :(得分:0)
我正在使用 Fefora 33,其他用户提出的解决方案对我不起作用。在我的情况下,问题是由 Fedora 33 上的更改引起的,默认情况下禁用了 SHA-1 签名 (https://fedoraproject.org/wiki/Changes/StrongCryptoSettings2)。
我解决了更改加密策略的问题:
update-crypto-policies --set DEFAULT:FEDORA32