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:

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

User Contributed Notes 13 notes

up
59
ssttoo at hotmail dot com
21 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 athttp://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
23
vince
14 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
9 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
15
nikita dot bulatenko at gmail dot com
12 years ago
CURLINFO_SSL_VERIFYRESULT error codes:0: ok the operation was successful. 2 : unable to get issuer certificate3: unable to get certificate CRL4: unable to decrypt certificate's signature5: unable to decrypt CRL's signature6: unable to decode issuer public key7: certificate signature failure8: CRL signature failure9: certificate is not yet valid10: certificate has expired11: CRL is not yet valid12:CRL has expired13: format error in certificate's notBefore field14: format error in certificate's notAfter field15: format error in CRL's lastUpdate field16: format error in CRL's nextUpdate field17: out of memory18: self signed certificate19: self signed certificate in certificate chain20: unable to get local issuer certificate21:unable to verify the first certificate22: certificate chain too long23: certificate revoked24: invalid CA certificate25: path length constraint exceeded26: unsupported certificate purpose27: certificate not trusted28: certificate rejected29: subject issuer mismatch30: authority and subject key identifier mismatch31: authority and issuer serial number mismatch32: key usage does not include certificate signing50: application verification failuredetails at http://www.openssl.org/docs/apps/verify.html#VERIFY_OPERATION
up
5
qrworld.net
10 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
7
nemetral
17 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
11 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
17 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
0
pluk77 at gmail dot com
1 year ago
You can still get the SSL verification result using CURLINFO_SSL_VERIFYRESULT when setting CURLOPT_SSL_VERIFYPEER to FALSE.Full list of result codes:0: ok1: unspecified certificate verification error2: unable to get issuer certificate3: unable to get certificate CRL4: unable to decrypt certificate's signature5: unable to decrypt CRL's signature6: unable to decode issuer public key7: certificate signature failure8: CRL signature failure9: certificate is not yet valid10: certificate has expired11: CRL is not yet valid12: CRL has expired13: format error in certificate's notBefore field14: format error in certificate's notAfter field15: format error in CRL's lastUpdate field16: format error in CRL's nextUpdate field17: out of memory18: self-signed certificate19: self-signed certificate in certificate chain20: unable to get local issuer certificate21: unable to verify the first certificate22: certificate chain too long23: certificate revoked24: issuer certificate doesn't have a public key25: path length constraint exceeded26: unsuitable certificate purpose27: certificate not trusted28: certificate rejected29: subject issuer mismatch30: authority and subject key identifier mismatch31: authority and issuer serial number mismatch32: key usage does not include certificate signing33: unable to get CRL issuer certificate34: unhandled critical extension35: key usage does not include CRL signing36: unhandled critical CRL extension37: invalid non-CA certificate (has CA markings)38: proxy path length constraint exceeded39: key usage does not include digital signature40: proxy certificates not allowed, please set the appropriate flag41: invalid or inconsistent certificate extension42: invalid or inconsistent certificate policy extension43: no explicit policy44: different CRL scope45: unsupported extension feature46: RFC 3779 resource not subset of parent's resources47: permitted subtree violation48: excluded subtree violation49: name constraints minimum and maximum not supported50: application verification failure51: unsupported name constraint type52: unsupported or invalid name constraint syntax53: unsupported or invalid name syntax54: CRL path validation error55: path loop56: Suite B: certificate version invalid57: Suite B: invalid public key algorithm58: Suite B: invalid ECC curve59: Suite B: invalid signature algorithm60: Suite B: curve not allowed for this LOS61: Suite B: cannot sign P-384 with P-25662: hostname mismatch63: email address mismatch64: IP address mismatch65: no matching DANE TLSA records66: EE certificate key too weak67: CA certificate key too weak68: CA signature digest algorithm too weak69: invalid certificate verification context70: issuer certificate lookup error71: Certificate Transparency required, but no valid SCTs found72: proxy subject name violation73: OCSP verification needed74: OCSP verification failed75: OCSP unknown cert76: Cannot find certificate signature algorithm77: subject signature algorithm and issuer public key algorithm mismatch78: cert info signature and signature algorithm mismatch79: invalid CA certificate80: Path length invalid for non-CA cert81: Path length given without key usage keyCertSign82: Key usage keyCertSign invalid for non-CA cert83: Issuer name empty84: Subject name empty85: Missing Authority Key Identifier86: Missing Subject Key Identifier87: Empty Subject Alternative Name extension89: Basic Constraints of CA cert not marked critical88: Subject empty and Subject Alt Name extension not critical90: Authority Key Identifier marked critical91: Subject Key Identifier marked critical92: CA cert does not include key usage extension93: Using cert extension requires at least X509v394: Certificate public key has explicit ECC parameters95: Raw public key untrusted, no trusted keys configuredsource: https://github.com/openssl/openssl/blob/master/include/openssl/x509_vfy.h.inhttps://github.com/openssl/openssl/blob/master/crypto/x509/x509_txt.c
up
0
c dot ball1729 at gmail dot com
2 years 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
10 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
0
Anonymous
15 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
-2
Curly
10 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.
To Top