web-dev-qa-db-fra.com

curl erreur "Erreur de protocole SSL inconnue dans la connexion" sur le serveur, mais fonctionne sur local

J'essaie de récupérer les données d'un site (j'ai censuré l'URL) avec ce code:

<?php 

  $url = [doesnt really matter];

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

  $archivo_xml = fopen("test.tst", "w");

  curl_setopt($ch, CURLOPT_FILE,$archivo_xml);

  curl_exec($ch);
  $as1 = curl_getinfo($ch, CURLINFO_NAMELOOKUP_TIME);
  $as2 = curl_getinfo($ch, CURLINFO_CONNECT_TIME);
  $as3 = curl_getinfo($ch, CURLINFO_PRETRANSFER_TIME);
  $as4 = curl_getinfo($ch, CURLINFO_STARTTRANSFER_TIME);
  $as5 = curl_getinfo($ch, CURLINFO_TOTAL_TIME);

  echo "Lookup: ",$as1," \n\r Connect: ",$as2," \n\r Pretransfer: ",$as3," \n\r Starttransfer: ",$as4," \n\r Total: ",$as5,"\n\r","Error: ", curl_error($ch), "\n\r";

  curl_close($ch);
  fclose($archivo_xml);

?>

Cela fonctionne bien sur local mais pas sur le serveur. Voici la sortie du local:

Lookup: 0.015155 
 Connect: 0.0281 
 Pretransfer: 0.129087 
 Starttransfer: 0.786341 
 Total: 0.786384
Error:

et voici la sortie du serveur:

Lookup: 0.028731 
 Connect: 0.043182 
 Pretransfer: 0 
 Starttransfer: 0 
 Total: 60.057787
Error: Unknown SSL protocol error in connection to [censored url] 

Avec toute autre URL fonctionne très bien, le problème est avec celui-ci spécifique.

localhost PHP version: 5.4.23

serveur PHP version: 5.5.7

Merci d'avance

8
martriay

R&EACUTE;SOLU. À cause de ce bogue connu http://sourceforge.net/p/curl/bugs/1319/ j'ai rétrogradé curl à 7.33 et cela a fonctionné.

5
martriay

Essayez de définircURLparam

curl_setopt($ch, CURLOPT_SSLVERSION,3); // Apparently 2 or 3
15
Shankar Damodaran

Comme dans le cas de ce message, ajouter curl_setopt($ch, CURLOPT_SSLVERSION,3); n'a pas immédiatement résolu le problème aujourd'hui. SSL a été validé de nouveau et accepté.

2
Chintan

J'ai eu une situation similaire avec la même erreur. En utilisant une constante comme celle-ci, ça a fonctionné:

curl_setopt( $handle, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_SSLv3' );

Lien recherché: https://github.com/guzzle/guzzle/issues/1364

Autres constantes: https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html

1
Ruud Laan

Essayez avec les deux options

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Si cela ne fonctionne toujours pas, il se peut que l'URL soit bloquée sur votre serveur.

0
kwelsan