首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cURL错误35 -连接到api.rkd.reuters.com:443的未知SSL协议错误

cURL错误35 -连接到api.rkd.reuters.com:443的未知SSL协议错误
EN

Stack Overflow用户
提问于 2013-10-15 14:44:26
回答 6查看 87K关注 0票数 11

从开发机器(mac)来说,通过PHP中的cURL连接到这里没有问题,但是在Ubuntu中,我得到了这个错误。我已经在本地机器和Amazon实例上尝试过了。我在谷歌上搜索过,一直到砖墙前。没有防火墙限制,这完全是个谜。php5-curl安装在ubuntu中,我只是没有任何想法。我执行了这个命令:

代码语言:javascript
复制
curl -v https://api.rkd.reuters.com/api/2006/05/01/TokenManagement_1.svc/Anonymous

得到了这个输出,没有任何解决方案的线索。还安装了OpenSSL。

代码语言:javascript
复制
* 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

对此,任何欢迎的想法

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-01-29 22:24:42

我也遇到了同样的问题,不幸的是,一个主机不愿升级到php 5.5。

我通过创建一个新的类扩展php的SoapClient来使用cURL来解决这个问题:

代码语言:javascript
复制
/**
 * 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;
  }

}
票数 2
EN

Stack Overflow用户

发布于 2013-12-29 04:33:38

我遇到了这个问题,我通过将curl版本设置为版本3来修复它。

代码语言:javascript
复制
curl_setopt($ch, CURLOPT_SSLVERSION,3);

显然,服务器开始需要server 3,此设置导致带有SSL的cURL重新开始工作。

票数 8
EN

Stack Overflow用户

发布于 2013-10-15 15:21:02

修好了!这是一个已知的Ubuntu12.04问题

这些指示

http://willbradley.name/2012/10/workaround-for-php-error-in-ubuntu-12-04-soapclient-ssl-crypto-enabling-timeout/

--取消它,它只是禁用了异常,这仍然不起作用!帮助!

-编辑-这是我到底是怎么修好它的!

我从5.4.3升级到PHP 5.5,并在调用中设置了以下选项,并对其进行了修正:

代码语言:javascript
复制
$options = array('ssl_method' => SOAP_SSL_METHOD_SSLv3,'soap_version' => SOAP_1_2);
$sc = new SoapClient('https://my-url.com/call/', $options);

升级是必要的,因为php5 < 5.5中不存在常量SOAP_SSL_METHOD_SSLv3,不幸的是,Ubuntu当时只允许通过apt更新php5升级到5.4.3。我手动安装了以后的版本,现在运行良好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19384161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档