Из машины разработки (mac) нет проблем с подключением через cURL в PHP к этому, но в Ubuntu я получаю эту ошибку. Я пробовал на локальной машине и на экземпляре Amazon AWS. Я googled и googled и продолжаю приходить к кирпичным стенам. Там нет ограничений на брандмауэре, это полная тайна. 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
Любые идеи, приветствованные в этом
У меня была такая же проблема, к сожалению, с хостом, не желающим обновляться до php 5.5.
Я решил это, создав новый класс, расширяющий soapClient php для использования 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; } }
У меня была эта проблема, и я исправил ее, установив версию curl SSL на версию 3
curl_setopt($ch, CURLOPT_SSLVERSION,3);
По-видимому, сервер начал требовать SSL версии 3, и этот параметр заставил cURL с SSL снова начать работать.
Починил это! Это известная проблема с Ubuntu 12.04
Эти инструкции
– Отмените это, это просто отключенные исключения, это все еще не работает! ПОМОГИТЕ!
– EDIT – HERES, КАК Я СДЕЛАЛ ЭТО В КОНЕЦ!
Я перешел на PHP 5.5 из 5.4.3 и задал следующие параметры в своем вызове, который исправил его:
$options = array('ssl_method' => SOAP_SSL_METHOD_SSLv3,'soap_version' => SOAP_1_2); $sc = new SoapClient('https://my-url.com/call/', $options);
Обновление было необходимо, потому что константа SOAP_SSL_METHOD_SSLv3 отсутствует в версиях PHP <5.5, и, к сожалению, Ubuntu Server в то время разрешал обновление до 5.4.3 через apt-get update php5. Я вручную установил более позднюю версию, и теперь она отлично работает.
Ошибка: CURL Ошибка: 35 – OpenSSL SSL_connect: SSL_ERROR_SYSCALL в httpapi.com:443 (IP: 162.xxx и 204.xxx)
Включение WHMCS:
Вы можете связаться со своим хостом, чтобы присвоить им IP-адрес, чтобы использовать их API.