curl_getinfo

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

curl_getinfoOttiene informazioni riguardo ad uno specifico trasferimento

Descrizione

curl_getinfo(resource $ch, int $opt = 0): mixed

Ottiene informazioni sull'ultimo trasferimento.

Elenco dei parametri

ch

Un identificativo cURL restituito da curl_init().

opt

Questo potrebbe essere una delle seguenti costanti:

  • CURLINFO_EFFECTIVE_URL - L'ultimo URL effettivo
  • CURLINFO_HTTP_CODE - L'ultimo codice HTTP ricevuto
  • CURLINFO_FILETIME - L'orario remoto del documento recuperato, se viene restituito -1 l'orario del documento è sconosciuto
  • CURLINFO_TOTAL_TIME - Il tempo totale in secondi della transazione per l'ultimo trasferimento
  • CURLINFO_NAMELOOKUP_TIME - Il tempo in secondi finchè la risoluzione dei nomi non è stata completata
  • CURLINFO_CONNECT_TIME - Il tempo in secondi impiegato per stabilire la connessione
  • CURLINFO_PRETRANSFER_TIME - Il tempo in secondi dall'inizio fino a poco prima che il trasferimento del file cominciasse
  • CURLINFO_STARTTRANSFER_TIME - Il tempo in secondi fino a quando il primo byte è in procinto di essere trasferito
  • CURLINFO_REDIRECT_COUNT - Il numero dei reindirizzamenti, con l'opzione CURLOPT_FOLLOWLOCATION abilitata
  • CURLINFO_REDIRECT_TIME - Il tempo in secondi di tutti le fasi di reindirizzamento prima che la transazione finale non venga avviata, con l'opzione CURLOPT_FOLLOWLOCATION abilitata
  • CURLINFO_REDIRECT_URL - Con l'opzione CURLOPT_FOLLOWLOCATION disabilitata: l'URL di reindirizzamento trovato nell'ultima transazione, che dovrebbe essere richiesto manualmente dopo. Con l'opzione CURLOPT_FOLLOWLOCATION abilitata: questo è vuoto. L'URL di reindirizzamento in questo caso è disponibile in CURLINFO_EFFECTIVE_URL
  • CURLINFO_PRIMARY_IP - L'indirizzo IP della connessione più recente
  • CURLINFO_PRIMARY_PORT - La porta di destinazione della connessione più recente
  • CURLINFO_LOCAL_IP - L'indirizzo IP locale (sorgente) della connessione più recente
  • CURLINFO_LOCAL_PORT - La porta locale (sorgente) della connessione più recente
  • CURLINFO_SIZE_UPLOAD - Numero totale di byte caricati (in upload)
  • CURLINFO_SIZE_DOWNLOAD - Numero totale di byte scaricati
  • CURLINFO_SPEED_DOWNLOAD - Velocità di download media
  • CURLINFO_SPEED_UPLOAD - Velocità di upload media
  • CURLINFO_HEADER_SIZE - Dimensione totale di tutti gli header ricevuti
  • CURLINFO_HEADER_OUT - La stringa di richiesta inviata. Per farlo funzionare, aggiungere l'opzione CURLINFO_HEADER_OUT al gestore chiamando curl_setopt()
  • CURLINFO_REQUEST_SIZE - Dimensione totale delle richieste effettuate, attualmente solo per le richieste HTTP
  • CURLINFO_SSL_VERIFYRESULT - Risultato della verifica del certificato SSL richiesto dall'impostazione CURLOPT_SSL_VERIFYPEER
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD - dimensione-del-contenuto del download, letto dal campo Content-Length:
  • CURLINFO_CONTENT_LENGTH_UPLOAD - Dimensione specificata dell'upload
  • CURLINFO_CONTENT_TYPE - Il Content-Type: del documento richiesto, NULL indica che il server non ha inviato un header Content-Type: valido
  • CURLINFO_PRIVATE - Dati privati associati con questo gestore cURL, precedentemente impostati con l'opzione CURLOPT_PRIVATE di curl_setopt()

Valori restituiti

Se viene dato opt, viene restituito il suo valore. Altrimenti, restituisce un array associativo con i seguenti elementi (che corrispondono a opt), o false in caso di fallimento:

  • "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" (Questo è impostato solo se CURLINFO_HEADER_OUT è stato impostato da una chiamata precedente a curl_setopt())
Notare che i dati privati non sono inclusi nell'array associativo e dovrebbero essere recuperati individualmente con l'opzione CURLINFO_PRIVATE.

Log delle modifiche

Versione Descrizione
5.4.7 Introdotte CURLINFO_PRIMARY_IP, CURLINFO_PRIMARY_PORT, CURLINFO_LOCAL_IP e CURLINFO_LOCAL_PORT.
5.3.7 Introdotto CURLINFO_REDIRECT_URL.
5.2.4 Introdotto CURLINFO_PRIVATE.
5.1.3 Introdotto CURLINFO_HEADER_OUT.

Esempi

Example #1 Esempio di curl_getinfo()

<?php
// Crea un gestore curl
$ch = curl_init('http://www.yahoo.com/');

// Esegue
curl_exec($ch);

// Controlla se si sono verificati degli errori
if(!curl_errno($ch))
{
$info = curl_getinfo($ch);

echo
'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
}

// Chiude il gestore
curl_close($ch);
?>

Note

Nota:

Le informazioni raccolte da questa funzione vengono mantenute se il gestore viene riutilizzato. Questo significa che a meno che una statistica non venga sovrascritta internamente da questa funzione, viene restituita l'informazione precedente.

add a note add a note

User Contributed Notes 13 notes

up
57
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
22
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
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
17
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
5
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
6
nemetral
16 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
3
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
2
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
1
Anonymous
14 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
0
c dot ball1729 at gmail dot com
1 year ago
A note about $curl_info['header_size'] (in response to the example above).

Note that the total includes the size of any received headers suppressed by CURLOPT_SUPPRESS_CONNECT_HEADERS (see: https://curl.se/libcurl/c/CURLINFO_HEADER_SIZE.html) so if you are using a proxy which adds additional headers along with this option, $curl_info['header_size'] will give you the wrong string index based on the headers available in PHP. i.e., it will eat in to the start of the response instead of being the index of the beginning of the response.
up
0
torres dot krys at gmail dot com
9 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
-1
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
-15
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));
?>
To Top