curl_getinfo

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

curl_getinfoLit les informations détaillant un transfert cURL

Description

curl_getinfo(CurlHandle $handle, int|null $option = null): mixed

curl_getinfo() lit les informations concernant le transfert handle.

Liste de paramètres

handle

Un gestionnaire cURL retourné par curl_init().

option

Ce paramètre peut prendre l'une des valeurs suivantes :

  • CURLINFO_EFFECTIVE_URL : Dernière URL réelle
  • CURLINFO_HTTP_CODE : Le dernier code de réponse. À partir de cURL 7.10.8, ceci est un alias hérité de CURLINFO_RESPONSE_CODE
  • CURLINFO_FILETIME : Date distante du document récupéré, avec CURLOPT_FILETIME activé ; si -1 est retourné la date du document distant est inconnue.
  • CURLINFO_TOTAL_TIME : Durée de la transaction en secondes pour le dernier transfert
  • CURLINFO_NAMELOOKUP_TIME : Durée de résolution du nom de domaine en secondes
  • CURLINFO_CONNECT_TIME : Durée d'établissement de la connexion en secondes
  • CURLINFO_PRETRANSFER_TIME : Durée en secondes, entre le début de la transaction et de début du transfert de fichiers
  • CURLINFO_STARTTRANSFER_TIME : Durée en secondes jusqu'à ce que le premier octet soit sur le point d'être transféré
  • CURLINFO_REDIRECT_COUNT : Nombre de redirections, avec l'option CURLOPT_FOLLOWLOCATION activée
  • CURLINFO_REDIRECT_TIME : Durée en secondes de toutes les étapes de redirection avant que la transaction finale ne soit débutée, avec l'option CURLOPT_FOLLOWLOCATION activée
  • CURLINFO_REDIRECT_URL - Avec l'option CURLOPT_FOLLOWLOCATION désactivée : URL de redirection trouvée dans la dernière transaction, qui devra être interrogé manuellement par la suite. Si l'option CURLOPT_FOLLOWLOCATION est activée : cette valeur est vide. Dans ce cas, l'url de redirection est disponible dans CURLINFO_EFFECTIVE_URL
  • CURLINFO_PRIMARY_IP - Adresse IP de la plus récente connexion
  • CURLINFO_PRIMARY_PORT - Port de destination de la plus récente connexion
  • CURLINFO_LOCAL_IP - Adresse IP locale (source) de la plus récente connexion
  • CURLINFO_LOCAL_PORT - Port local (source) de la plus récente connexion
  • CURLINFO_SIZE_UPLOAD : Nombre total d'octets envoyés
  • CURLINFO_SIZE_DOWNLOAD : Nombre total d'octets téléchargés
  • CURLINFO_SPEED_DOWNLOAD : Vitesse moyenne de téléchargement
  • CURLINFO_SPEED_UPLOAD : Vitesse moyenne d'envoi
  • CURLINFO_HEADER_SIZE : Taille des en-têtes reçus
  • CURLINFO_HEADER_OUT : La chaîne de requête envoyée. Pour que cela fonctionne, appelez curl_setopt() avec l'option CURLINFO_HEADER_OUT.
  • CURLINFO_REQUEST_SIZE : Taille totale des requêtes envoyées. Actuellement, uniquement pour les requêtes HTTP
  • CURLINFO_SSL_VERIFYRESULT : Résultat de la vérification de la certification SSL demandée par CURLOPT_SSL_VERIFYPEER
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD : Taille du corps du téléchargement, lu dans l'en-tête Content-Length:
  • CURLINFO_CONTENT_LENGTH_UPLOAD : Taille spécifiée de l'envoi.
  • CURLINFO_CONTENT_TYPE : Content-Type: du document demandé. null indique que le serveur n'a pas envoyé d'en-tête Content-Type:
  • CURLINFO_PRIVATE - Données privées associées avec le gestionnaire cURL, précédement défini avec l'option CURLOPT_PRIVATE de la fonction curl_setopt()
  • CURLINFO_RESPONSE_CODE - Le dernier code de réponse
  • CURLINFO_HTTP_CONNECTCODE - Le code réponse CONNECT
  • CURLINFO_HTTPAUTH_AVAIL - Masque binaire indiquant la(/les) méthode(s) d'authentification disponbile en accord avec la réponse précédente
  • CURLINFO_PROXYAUTH_AVAIL - Masque binaire indiquant la(/les) méthode(s) d'authentification proxy disponbile en accord avec la réponse précédente
  • CURLINFO_OS_ERRNO - Errno depuis un échec de connexion. Le numéro est spécifique au système et à l'OP.
  • CURLINFO_NUM_CONNECTS - Nombre de connexion curl a dû créer pour achever le transfert précédent
  • CURLINFO_SSL_ENGINES - Moteur-crypto OpenSSL supporté
  • CURLINFO_COOKIELIST - Tous les cookies connue
  • CURLINFO_FTP_ENTRY_PATH - Chemin d'entrée dans un serveur FTP
  • CURLINFO_APPCONNECT_TIME - Temps en seconde qu'il ait fallu depuis le début jusqu'à ce que la connexion/handshake SSL/SSH à l'hôte distant a été complété.
  • CURLINFO_CERTINFO - Chaîne de certificats TLS
  • CURLINFO_CONDITION_UNMET - Info sur le temps conditionel non satisfait
  • CURLINFO_RTSP_CLIENT_CSEQ - Prochain client RTSP CSeq
  • CURLINFO_RTSP_CSEQ_RECV - Récemment reçu CSeq
  • CURLINFO_RTSP_SERVER_CSEQ - Prochain serveur RTSP CSeq
  • CURLINFO_RTSP_SESSION_ID - ID de session RTSP
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD_T - Le content-length du téléchargement. Cette valeur est lu depuis le champ Content-Type:. -1 si la taille est inconnue
  • CURLINFO_CONTENT_LENGTH_UPLOAD_T - La taille spécifié pour le téléversment. -1 si la taille est inconnue
  • CURLINFO_HTTP_VERSION - La version utilisé lors de la dernière connexion HTTP. La valeur de retour sera l'une des constantes CURL_HTTP_VERSION_* définie, ou 0 si la version ne peut être déterminée
  • CURLINFO_PROTOCOL - Le protocole utilisé lors de la dernière connexion HTTP. La valeur retourné sera exactement l'une des valeur CURLPROTO_*
  • CURLINFO_PROXY_SSL_VERIFYRESULT - Le résultat de la vérification de certificat qui a été demandé (utilisant l'option CURLOPT_PROXY_SSL_VERIFYPEER). Utilisé seulement pour les proxies HTTPS
  • CURLINFO_SCHEME - La schéma de l'URL utilisé pour la connexion la plus récente
  • CURLINFO_SIZE_DOWNLOAD_T - Nombre total d'octets qui ont été téléchargé. Le nombre est uniquement pour le dernier transfer et sera réinitiallisé denouveau pour chaque nouveau transfer
  • CURLINFO_SIZE_UPLOAD_T - Nombre total d'octets qui ont été téléversé
  • CURLINFO_SPEED_DOWNLOAD_T - La vitesse de téléchargement moyenne en octet/seconde que curl a mesuré pour le téléchargement complet
  • CURLINFO_SPEED_UPLOAD_T - La vitesse de téléchargement moyenne en octet/seconde que curl a mesuré pour le téléversement complet
  • CURLINFO_APPCONNECT_TIME_T - Temps, en microseconde, qu'il a prit entre le début jusqu'à ce que la connection/handshake SSL/SSH à l'hôte distant a été complété
  • CURLINFO_CONNECT_TIME_T - Temps total pris, en microsecondes, depuis le début jusqu'à ce que la connection à l'hôte distant (ou proxy) a été complété
  • CURLINFO_FILETIME_T - Temps distant du document récupéré (en tant qu'horodatage Unix), une alternative à CURLINFO_FILETIME pour permettre aux systèmes avec des variables long 32 bits d'extraire les dates en dehors de l'intervalle 32bit de l'horodatage
  • CURLINFO_NAMELOOKUP_TIME_T - Temps en microsecondes depuis le début jusqu'à ce que la résolution de nom a été complété
  • CURLINFO_PRETRANSFER_TIME_T - Temps pris depuis le début jusqu'à ce que le transfer de fichier est sur le point de commencer, en microsecondes
  • CURLINFO_REDIRECT_TIME_T - Temps total, en microsecondes, prit pour que toutes les étapes de redirection, incluant la recherche de nom, connexion, pré-transfer et transfer avant que la transaction finale a été commencé
  • CURLINFO_STARTTRANSFER_TIME_T - Temps, en microsecondes, il a prit depuis le début jusqu'à ce que le premier octet a été reçu
  • CURLINFO_TOTAL_TIME_T - Temps total en microsecondes pour le transfer précédent, incluant la résolution de nom, connection TCP, etc.

Valeurs de retour

Si option est fourni, la valeur sera retournée. Sinon, ce sera un tableau associatif contenant les éléments suivants (qui correspond à option), ou false si une erreur survient :

  • "url"
  • "content_type"
  • "http_code"
  • "header_size"
  • "request_size"
  • "filetime"
  • "ssl_verify_result"
  • "redirect_count"
  • "total_time"
  • "namelookup_time"
  • "connect_time"
  • "pretransfer_time"
  • "size_upload"
  • "size_download"
  • "speed_download"
  • "speed_upload"
  • "download_content_length"
  • "upload_content_length"
  • "starttransfer_time"
  • "redirect_time"
  • "certinfo"
  • "primary_ip"
  • "primary_port"
  • "local_ip"
  • "local_port"
  • "redirect_url"
  • "request_header" (Existe seulement si CURLINFO_HEADER_OUT est utilisé via un appel à curl_setopt())
Veuillez noter que les données privées ne sont pas incluses dans le tableau associatif et doivent être récupérées individuellement avec l'option CURLINFO_PRIVATE.

Historique

Version Description
8.0.0 handle attend désormais une instance de CurlHandle; auparavant; une resource était attendue.
8.0.0 option is nullable now; previously, the default was 0.
7.3.0 Ajout de CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, CURLINFO_CONTENT_LENGTH_UPLOAD_T, CURLINFO_HTTP_VERSION, CURLINFO_PROTOCOL, CURLINFO_PROXY_SSL_VERIFYRESULT, CURLINFO_SCHEME, CURLINFO_SIZE_DOWNLOAD_T, CURLINFO_SIZE_UPLOAD_T, CURLINFO_SPEED_DOWNLOAD_T, CURLINFO_SPEED_UPLOAD_T, CURLINFO_APPCONNECT_TIME_T, CURLINFO_CONNECT_TIME_T, CURLINFO_FILETIME_T, CURLINFO_NAMELOOKUP_TIME_T, CURLINFO_PRETRANSFER_TIME_T, CURLINFO_REDIRECT_TIME_T, CURLINFO_STARTTRANSFER_TIME_T, CURLINFO_TOTAL_TIME_T.

Exemples

Exemple #1 Exemple avec curl_getinfo()

<?php
// Création d'un gestionnaire cURL
$ch curl_init('http://www.example.com/');

// Exécution
curl_exec($ch);

// Vérification si une erreur est survenue
if(!curl_errno($ch))
{
 
$info curl_getinfo($ch);

 echo 
'La requête a mis ' $info['total_time'] . ' secondes à être envoyée à ' $info['url'];
}

// Fermeture du gestionnaire
curl_close($ch);
?>

Exemple #2 Exemple de curl_getinfo() avec le paramètre option

<?php
// Création d'un gestionnaire cURL
$ch curl_init('http://www.example.com/');

// Exécution
curl_exec($ch);

// Vérification du code d'état HTTP
if (!curl_errno($ch)) {
  switch (
$http_code curl_getinfo($chCURLINFO_HTTP_CODE)) {
    case 
200:  # OK
      
break;
    default:
      echo 
'Unexpected HTTP code: '$http_code"\n";
  }
}

// Close handle
curl_close($ch);
?>

Notes

Note:

Les informations founies par cette fonction sont conservées si la connexion est réutilisée. La donnée précédemment utilisée est donc retournée à moins que celle-ci ne soit écrasée en interne entre temps.

add a note add a note

User Contributed Notes 13 notes

up
54
ssttoo at hotmail dot com
20 years ago
Here are the response codes ready for pasting in an ini-style file. Can be used to provide more descriptive message, corresponding to 'http_code' index of the arrray returned by curl_getinfo().
These are taken from the W3 consortium HTTP/1.1: Status Code Definitions, found at
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

[Informational 1xx]
100="Continue"
101="Switching Protocols"

[Successful 2xx]
200="OK"
201="Created"
202="Accepted"
203="Non-Authoritative Information"
204="No Content"
205="Reset Content"
206="Partial Content"

[Redirection 3xx]
300="Multiple Choices"
301="Moved Permanently"
302="Found"
303="See Other"
304="Not Modified"
305="Use Proxy"
306="(Unused)"
307="Temporary Redirect"

[Client Error 4xx]
400="Bad Request"
401="Unauthorized"
402="Payment Required"
403="Forbidden"
404="Not Found"
405="Method Not Allowed"
406="Not Acceptable"
407="Proxy Authentication Required"
408="Request Timeout"
409="Conflict"
410="Gone"
411="Length Required"
412="Precondition Failed"
413="Request Entity Too Large"
414="Request-URI Too Long"
415="Unsupported Media Type"
416="Requested Range Not Satisfiable"
417="Expectation Failed"

[Server Error 5xx]
500="Internal Server Error"
501="Not Implemented"
502="Bad Gateway"
503="Service Unavailable"
504="Gateway Timeout"
505="HTTP Version Not Supported"

And an example usage:
<?php
$ch
= curl_init(); // create cURL handle (ch)
if (!$ch) {
    die(
"Couldn't initialize a cURL handle");
}
// set some cURL options
$ret = curl_setopt($ch, CURLOPT_URL,            "http://mail.yahoo.com");
$ret = curl_setopt($ch, CURLOPT_HEADER,         1);
$ret = curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$ret = curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
$ret = curl_setopt($ch, CURLOPT_TIMEOUT,        30);

// execute
$ret = curl_exec($ch);

if (empty(
$ret)) {
   
// some kind of an error happened
   
die(curl_error($ch));
   
curl_close($ch); // close cURL handler
} else {
   
$info = curl_getinfo($ch);
   
curl_close($ch); // close cURL handler

   
if (empty($info['http_code'])) {
            die(
"No HTTP code was returned");
    } else {
       
// load the HTTP codes
       
$http_codes = parse_ini_file("path/to/the/ini/file/I/pasted/above");
       
       
// echo results
       
echo "The server responded: <br />";
        echo
$info['http_code'] . " " . $http_codes[$info['http_code']];
    }

}
?>
up
7
qrworld.net
9 years ago
Here you have a function that I use to get the content of a URL using cURL. This uses curl_getinfo to know if it is a regular URL or maybe a redirection.

I hope it would be useful for you:

function getUrlContent($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return ($httpcode>=200 && $httpcode<300) ? $data : false;
}

The source comes from this website:

http://softontherocks.blogspot.com/2014/11/descargar-el-contenido-de-una-url.html
up
13
nikita dot bulatenko at gmail dot com
11 years ago
CURLINFO_SSL_VERIFYRESULT error codes:
0: ok the operation was successful.
2 : unable to get issuer certificate
3: unable to get certificate CRL
4: unable to decrypt certificate's signature
5: unable to decrypt CRL's signature
6: unable to decode issuer public key
7: certificate signature failure
8: CRL signature failure
9: certificate is not yet valid
10: certificate has expired
11: CRL is not yet valid
12:CRL has expired
13: format error in certificate's notBefore field
14: format error in certificate's notAfter field
15: format error in CRL's lastUpdate field
16: format error in CRL's nextUpdate field
17: out of memory
18: self signed certificate
19: self signed certificate in certificate chain
20: unable to get local issuer certificate
21:unable to verify the first certificate
22: certificate chain too long
23: certificate revoked
24: invalid CA certificate
25: path length constraint exceeded
26: unsupported certificate purpose
27: certificate not trusted
28: certificate rejected
29: subject issuer mismatch
30: authority and subject key identifier mismatch
31: authority and issuer serial number mismatch
32: key usage does not include certificate signing
50: application verification failure
details at http://www.openssl.org/docs/apps/verify.html#VERIFY_OPERATION
up
13
vince
13 years ago
CURLINFO_HTTP_CODE does not return a string, as the docs say, but rather an integer.

<?php
    $c
= curl_init('http://www.example.com/');
    if(
curl_getinfo($c, CURLINFO_HTTP_CODE) === '200') echo "CURLINFO_HTTP_CODE returns a string.";
    if(
curl_getinfo($c, CURLINFO_HTTP_CODE) === 200) echo "CURLINFO_HTTP_CODE returns an integer.";
   
curl_close($c);
?>

returns

"CURLINFO_HTTP_CODE returns an integer."
up
7
nemetral
15 years ago
Just a quick note: if you want to use curl_getinfo() with option CURLINFO_HEADER_OUT in order to debug your cURL request, you must add curl_setopt($handle, CURLINFO_HEADER_OUT, true); first while specifying the options.
up
6
Mark Evers
16 years ago
There is a constant missing from that list.  CURLINFO_REDIRECT_COUNT will give you the number of redirects it went through if CURLOPT_FOLLOWLOCATION was set.
up
2
public-mail at alekciy dot ru
8 years ago
Note, header_size include "\r\n\r\n". So if you use CURLOPT_FOLLOWLOCATION>0, CURLOPT_HEADER=true, CURLOPT_RETURNTRANSFER=true right way splite header/body:

$response = curl_exec($ch);
$curl_info = curl_getinfo($ch);
curl_close($ch);
$header_size = $curl_info['header_size'];
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
up
5
bg at enativ dot com
10 years ago
curl_getinfo($ch) will also return 'redirect_url' if there is one (even if CURLOPT_FOLLOWLOCATION set to false).
I don't know why it's not in the doc..
up
0
Curly
9 years ago
If you call curl_reset() on a handle that has already been passed to curl_exec(), and then perform a curl_getinfo() on the same handle, you may expect that you get the same result as if you called curl_getinfo() immediately after curl_init(). This is not the case, however. cURL will return the data from the previous execution. If you want to completely reset you actually need to unset the cURL handle and recreate a new one.
up
0
Anonymous
13 years ago
The main doc neglects to mention that when the CURLINFO_HEADER_OUT option is set the array returned by this function will included a new property, request_header, that is a string of the headers sent in the request.
up
-1
torres dot krys at gmail dot com
8 years ago
If you use curl option CURLOPT_NOBODY = true to test if distant url is available, any sites can send you an http code 400 like Cdiscount Wsdl :

$ch = @curl_init($wsdl);

if($ch === false)
    return false;
       
@curl_setopt($ch, CURLOPT_HEADER         ,true);    // we want headers
@curl_setopt($ch, CURLOPT_NOBODY         ,true);    // dont need body
@curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true);    // catch output (do NOT print!)

@curl_exec($ch);

if(@curl_errno($ch)){   // should be 0
    @curl_close($ch);
    return false;
}

$code = @curl_getinfo($ch, CURLINFO_HTTP_CODE);

Modifying CURLOPT_NOBODY to false, http code sent is 200 otherwise http code is 400 !!!
up
-13
luiheidsgoeroe at hotmail dot com
16 years ago
Keep in mind that for CURLOPT_RETURNTRANSFER it has to be set with curl_setopt() before execution:

This doesn't work:
<?php
$ch
= curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
var_dump(curl_getinfo($ch,CURLINFO_HEADER_OUT));
?>

This works:
<?php
$ch
= curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_exec($ch);
var_dump(curl_getinfo($ch,CURLINFO_HEADER_OUT));
?>
up
-56
Piker
10 years ago
Example 1 should use "if(curl_errno($ch))" not "if(!curl_errno($ch))"
To Top