info - Comment intercepter les erreurs de curl en PHP




php curl timeout (2)

Si CURLOPT_FAILONERROR est false , les erreurs http ne déclencheront pas d'erreurs de curl .

<?php
if (@$_GET['curl']=="yes") {
  header('HTTP/1.1 503 Service Temporarily Unavailable');
} else {
  $ch=curl_init($url = "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?curl=yes");
  curl_setopt($ch, CURLOPT_FAILONERROR, true);
  $response=curl_exec($ch);
  $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  $curl_errno= curl_errno($ch);
  if ($http_status==503)
    echo "HTTP Status == 503 <br/>";
  echo "Curl Errno returned $curl_errno <br/>";
}

J'utilise les fonctions curl de PHP pour publier des données sur le serveur web depuis ma machine locale. Mon code est le suivant:

$c = curl_init();
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_RETURNTRANSFER,true);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $data);
$result=curl_exec ($c);

if(curl_exec($c) === false) {
    echo "ok";
}
else {
    echo "error";
}

curl_close ($c);

Malheureusement, je ne suis pas en mesure d'attraper des erreurs comme 404, 500 ou une défaillance du réseau. Alors, comment vais-je savoir que les données n'ont pas été publiées ou récupérées à partir de la télécommande?


Vous pouvez utiliser la fonction curl_error() pour détecter s'il y a eu une erreur. Par exemple:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $your_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true); // Required for HTTP error codes to be reported via our call to curl_error($ch)
//...
curl_exec($ch);
if (curl_error($ch)) {
    $error_msg = curl_error($ch);
}
curl_close($ch);

if (isset($error_msg)) {
    // TODO - Handle cURL error accordingly
}

Voir la description des codes d'erreur curl ici





curl