Depuis la machine de développement (mac), il n’ya aucun problème à se connecter via cURL dans PHP à ceci, mais dans Ubuntu, j’obtiens cette erreur. J'ai essayé sur une machine locale et sur une instance Amazon AWS. J'ai googué et glissé sur google et je n'arrête pas de grimper aux murs de briques. Il n'y a pas de restrictions de pare-feu en place, c'est un mystère complet. php5-curl IS installé à Ubuntu, je n'ai simplement aucune idée. J'ai lancé cette commande:
curl -v https://api.rkd.reuters.com/api/2006/05/01/TokenManagement_1.svc/Anonymous
et obtenu cette sortie, aucun indice que ce soit à une solution. OpenSSL est également installé.
* 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
Toutes les idées bien accueillies sur ce
J'ai eu le même problème, malheureusement avec un hôte refusant de passer à PHP 5.5.
Je l'ai résolu en créant une nouvelle classe permettant à SoapClient de PHP d'utiliser 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;
}
}
J'ai eu ce problème et je l'ai corrigé en réglant la version de curl SSL sur la version 3
curl_setopt($ch, CURLOPT_SSLVERSION,3);
Apparemment, le serveur a commencé à utiliser SSL version 3, et ce paramètre a permis à cURL avec SSL de fonctionner à nouveau.
Fixe le! C'est un problème connu avec Ubuntu 12.04
Ces instructions
- Annuler ça, ça a juste désactivé les exceptions, ça ne marche toujours pas! AIDEZ-MOI!
- EDIT - HERES COMMENT J’AI FIXÉ LA FIN!
J'ai mis à niveau vers PHP 5.5 à partir de la version 5.4.3 et défini les options suivantes dans mon appel, ce qui l'a corrigé:
$options = array('ssl_method' => SOAP_SSL_METHOD_SSLv3,'soap_version' => SOAP_1_2);
$sc = new SoapClient('https://my-url.com/call/', $options);
La mise à niveau était nécessaire car la constante SOAP_SSL_METHOD_SSLv3 n'est pas présente dans les versions PHP <5.5 et, malheureusement, Ubuntu Server à l'époque n'autorisait une mise à niveau que vers 5.4.3 via apt-get update php5. J'ai installé manuellement la version la plus récente et cela fonctionne bien maintenant.
Erreur: CURL Erreur: 35 - OpenSSL SSL_connect: SSL_ERROR_SYSCALL en connexion avec httpapi.com:443 (IP: 162.x.x.x & 204.x.x.x)
Cas de WHMCS:
Vous pouvez contacter votre hôte pour que son adresse IP figure sur la liste blanche afin d'utiliser son API.