curl_getinfo

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

curl_getinfoRuft Informationen zu einem bestimmten Transfer ab

Beschreibung

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

Gibt Informationen über den letzen Transfer zurück.

Parameter-Liste

handle

Ein von curl_init() zurückgegebenes cURL-Handle.

option

Dies kann eine der folgenden Konstanten sein:

  • CURLINFO_EFFECTIVE_URL - Die letzte erfolgreiche URL
  • CURLINFO_HTTP_CODE - Der letzte Antwortcode. Von cURL 7.10.8 an ist dies ein veralteter Alias von CURLINFO_RESPONSE_CODE
  • CURLINFO_FILETIME - Die (Server-) Zeit der letzten Änderung des abgerufenen Dokuments, wenn die Option CURLOPT_FILETIME aktiviert ist; wenn -1 zurückgegeben wird, ist die Zeit unbekannt
  • CURLINFO_TOTAL_TIME - Die Gesamtdauer des letzten Transfers in Sekunden
  • CURLINFO_NAMELOOKUP_TIME - Die Zeit in Sekunden, bis die Auflösung des Hostnamens abgeschlossen war.
  • CURLINFO_CONNECT_TIME - Die Dauer des Verbindungsaufbaus in Sekunden
  • CURLINFO_PRETRANSFER_TIME - Die Zeit in Sekunden zwischen dem Start und dem eigentlichen Beginn des Empfangs
  • CURLINFO_STARTTRANSFER_TIME - Die Zeit in Sekunden bis zur Übertragung des ersten Bytes
  • CURLINFO_REDIRECT_COUNT - Die Anzahl der Weiterleitungen, wenn die Option CURLOPT_FOLLOWLOCATION aktiviert ist
  • CURLINFO_REDIRECT_TIME - Die Zeit in Sekunden, die von allen Weiterleitungsschritten beansprucht wird, bevor der eigentliche Transfer beginnt, wenn die Option CURLOPT_FOLLOWLOCATION aktiviert ist
  • CURLINFO_REDIRECT_URL - Bei deaktivierter CURLOPT_FOLLOWLOCATION-Option: die Weiterleitungs-URL, die in der letzten Transaktion gefunden wurde und als nächstes manuell angefordert werden sollte. Bei aktivierter CURLOPT_FOLLOWLOCATION-Option ist dies immer leer. Die Weiterleitungs-URL ist in diesem Fall in CURLINFO_EFFECTIVE_URL verfügbar
  • CURLINFO_PRIMARY_IP - Die IP-Adresse der jüngsten Verbindung
  • CURLINFO_PRIMARY_PORT - Der Ziel-Port der jüngsten Verbindung
  • CURLINFO_LOCAL_IP - Die lokale (Quell-) IP-Adresse der jüngsten Verbindung
  • CURLINFO_LOCAL_PORT - Der lokale (Quell-) Port der jüngsten Verbindung
  • CURLINFO_SIZE_UPLOAD - Die Anzahl der gesendeten Bytes
  • CURLINFO_SIZE_DOWNLOAD - Die Anzahl der empfangenen Bytes
  • CURLINFO_SPEED_DOWNLOAD - Die durchschnittliche Download-Geschwindigkeit
  • CURLINFO_SPEED_UPLOAD - Die durchschnittliche Upload-Geschwindigkeit
  • CURLINFO_HEADER_SIZE - Die Gesamtgröße aller empfangenen Header
  • CURLINFO_HEADER_OUT - Die gesendete Anfrage. Damit dies funktioniert, muss die Option CURLINFO_HEADER_OUT durch Aufruf von curl_setopt() zum Handle hinzugefügt werden
  • CURLINFO_REFERER - Der Referrer-Header
  • CURLINFO_REQUEST_SIZE - Die Gesamtgröße aller Anfragen; momentan nur für HTTP verfügbar
  • CURLINFO_RETRY_AFTER - Die Information aus dem Retry-After:-Header oder Null, wenn es keinen gültigen Header gibt.
  • CURLINFO_SSL_VERIFYRESULT - Das Ergebnis der Überprüfung des SSL-Zertifikats, angefordert durch das Setzen von CURLOPT_SSL_VERIFYPEER
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD - Die Größe des Downloads, ermittelt aus dem Content-Length:-Header
  • CURLINFO_CONTENT_LENGTH_UPLOAD - Die festgesetzte Größe des Uploads
  • CURLINFO_CONTENT_TYPE - Der Content-Type: des angeforderten Dokuments. NULL zeigt an, dass der Server keinen gültigen Content-Type:-Header gesendet hat
  • CURLINFO_PRIVATE - Private Daten, die zu diesem cURL-Handle gehören und zuvor mit der Option CURLOPT_PRIVATE der Funktion curl_setopt() gesetzt wurden
  • CURLINFO_PROXY_ERROR - Der detaillierte (SOCKS) Proxy-Fehlercode, wenn bei der letzten Übertragung ein CURLE_PROXY Fehler aufgetreten ist. Der zurückgegebene Wert ist genau einer der CURLPX_*-Werte. Wenn kein Antwortcode verfügbar ist, lautet der Fehlercode CURLPX_OK.
  • CURLINFO_RESPONSE_CODE - Der letzte Antwortcode
  • CURLINFO_HTTP_CONNECTCODE - Der CONNECT-Antwortcode
  • CURLINFO_HTTPAUTH_AVAIL - Eine Bitmaske, die die verfügbaren Authentifizierungsmethode(n) gemäß der vorherigen Antwort anzeigt
  • CURLINFO_PROXYAUTH_AVAIL - Eine Bitmaske, die die verfügbaren Proxy-Authentifikationsmethode(n) gemäß der vorherigen Antwort anzeigt
  • CURLINFO_OS_ERRNO - Die Fehlernummer (Errno) eines Verbindungsfehlers. Die Zahl ist OS- und systemabhängig.
  • CURLINFO_NUM_CONNECTS - Die Anzahl der Verbindungen, die cURL erzeugen musste, um die vorherigen Übertragung durchzuführen
  • CURLINFO_SSL_ENGINES - Die unterstützten OpenSSL-Crypto-Engines
  • CURLINFO_COOKIELIST - Alle bekannten Cookies
  • CURLINFO_FTP_ENTRY_PATH - Der Entry-Pfad des FTP-Servers
  • CURLINFO_APPCONNECT_TIME - Die Zeitdauer in Sekunden, die bis zum SSL/SSH-Verbindungsaufbau/Handshake zum entfernten Server verstrichen ist
  • CURLINFO_CERTINFO - Die TLS-Zertifikatskette
  • CURLINFO_CONDITION_UNMET - Die Info über eine nicht eingehaltene Zeitbedingung
  • CURLINFO_RTSP_CLIENT_CSEQ - Die nächste CSeq des RTSP-Clients
  • CURLINFO_RTSP_CSEQ_RECV - Die zuletzt empfangene CSeq
  • CURLINFO_RTSP_SERVER_CSEQ - Die nächste CSeq des RTSP-Servers
  • CURLINFO_RTSP_SESSION_ID - Die RTSP-Session-ID
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD_T - Die inhaltliche Länge des Downloads. Das ist der Wert, der aus dem Content-Length:-Feld gelesen wurde. -1, wenn die Größe nicht bekannt ist
  • CURLINFO_CONTENT_LENGTH_UPLOAD_T - Die angegebene Größe des Uploads. -1, wenn die Größe nicht bekannt ist
  • CURLINFO_HTTP_VERSION - Die Version, die in der letzten HTTP-Verbindung verwendet wurde. Der Rückgabewert ist eine der definierten CURL_HTTP_VERSION_*-Konstanten oder 0, wenn die Version nicht ermittelt werden kann
  • CURLINFO_PROTOCOL - Das Protokoll, das in der letzten HTTP-Verbindung verwendet wurde. Der Rückgabewert ist genau einer der CURLPROTO_*-Werte
  • CURLINFO_PROXY_SSL_VERIFYRESULT - Das Ergebnis der Zertifikatsprüfung, die angefordert wurde (durch Verwendung der Option CURLOPT_PROXY_SSL_VERIFYPEER). Wird nur für HTTPS-Proxies verwendet
  • CURLINFO_SCHEME - Das URL-Schema, das für die jüngste Verbindung verwendet wurde
  • CURLINFO_SIZE_DOWNLOAD_T - Die Gesamtanzahl von Bytes, die heruntergeladen wurden. Die Anzahl betrifft nur die letzte Übertragung, und wird für jede neue Übertragung zurückgesetzt
  • CURLINFO_SIZE_UPLOAD_T - Die Gesamtanzahl von Bytes, die hochgeladen wurden
  • CURLINFO_SPEED_DOWNLOAD_T - Die durchschnittliche Download-Geschwindigkeit in Bytes pro Sekunde, die CURL für den vollständigen Download gemessen hat
  • CURLINFO_SPEED_UPLOAD_T - Die durchschnittliche Upload-Geschwindigkeit in Bytes pro Sekunde, die CURL für den vollständigen Upload gemessen hat
  • CURLINFO_APPCONNECT_TIME_T - Die Zeit in Mikrosekunden, die vom Beginn bis zur Vollendung der SSL/SSH-Verbindung/des Handshakes zum Remote-Host vergangen ist
  • CURLINFO_CONNECT_TIME_T - Die Gesamtdauer in Mikrosekunden, vom Beginn bis zur Vollendung der Verbindung zum Remote-Host (oder Proxy)
  • CURLINFO_FILETIME_T - Die letzte Änderung des abgerufenen Dokuments (als Unix-Zeitstempel); eine Alternative zu CURLINFO_FILETIME, die es Systemen mit 32-Bit-Ganzzahlvariablen ermöglicht, Daten außerhalb des 32-Bit-Zeitstempelbereichs zu extrahieren
  • CURLINFO_NAMELOOKUP_TIME_T - Die Dauer in Mikrosekunden vom Beginn bis zur Vervollständigung der Namensauflösung
  • CURLINFO_PRETRANSFER_TIME_T - Die benötigte Zeit vom Beginn bis zum eigentlichen Beginn der Dateiübertragung in Mikrosekunden
  • CURLINFO_REDIRECT_TIME_T - Die Gesamtdauer in Mikrosekunden für alle Weiterleitungsschritte einschließlich Namenslookup, Verbindung, Vorübertragung und Übertragung, bis zum Beginn der eigentlichen Transaktion
  • CURLINFO_STARTTRANSFER_TIME_T - Die benötigte Zeit in Mikrosekunden vom Beginn bis zum Empfang des ersten Bytes
  • CURLINFO_TOTAL_TIME_T - Die Gesamtdauer in Mikrosekunden für die vorhergehende Übertragung einschließlich Namensauflösung, TCP-Verbindung usw.

Rückgabewerte

Wird der Parameter option angegeben, wird der entsprechende Wert zurückgegeben. Andernfalls liefert die Funktion ein assoziatives Array mit den folgenden Elementen zurück (analog zum Parameter option), oder false im Fehlerfall:

  • "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" (Dies ist nur gesetzt, wenn die Option CURLINFO_HEADER_OUT durch einen vorherigen Aufruf von curl_setopt() gesetzt wurde)
Es ist zu beachten, dass private Daten nicht im assoziativen Array enthalten sind, sondern individuell mit der Option CURLINFO_PRIVATE abgerufen werden müssen.

Changelog

Version Beschreibung
8.2.0 CURLINFO_PROXY_ERROR, CURLINFO_REFERER, CURLINFO_RETRY_AFTER eingeführt.
8.0.0 handle erwartet nun eine CurlHandle-Instanz; vorher wurde eine Ressource erwartet.
8.0.0 option ist jetzt nullable (akzeptiert den null-Wert); vorher war der Vorgabewert 0.
7.3.0 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 eingeführt.

Beispiele

Beispiel #1 curl_getinfo()-Beispiel

<?php
// Eine cURL-Ressource erstellen
$ch = curl_init('http://www.example.com/');

// ausführen
curl_exec($ch);

// prüfen, ob ein Fehler aufgetreten ist
if (!curl_errno($ch)) {
$info = curl_getinfo($ch);
echo
'Es wurden ', $info['total_time'], ' Sekunden benötigt für eine Anfrage an ', $info['url'], "\n";
}

// Ressource schliessen
curl_close($ch);
?>

Beispiel #2 curl_getinfo()-Beispiel mit dem Parameter option

<?php
// Eine cURL-Ressource erstellen
$ch = curl_init('http://www.example.com/');

// ausführen
curl_exec($ch);

// HTTP-Status-Code prüfen
if (!curl_errno($ch)) {
switch (
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
case
200: # OK
break;
default:
echo
'Unerwarteter HTTP-Code: ', $http_code, "\n";
}
}

// Ressource schliessen
curl_close($ch);
?>

Anmerkungen

Hinweis:

Informationen, die mit dieser Funktion gesammelt wurden, bleiben erhalten, wenn das Handle wiederverwendet wird. Das bedeutet, dass außer wenn eine Statistik intern von dieser Funktion überschrieben wird, die vorherige Info zurückgegeben wird.

add a note

User Contributed Notes 13 notes

up
56
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
20
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
16
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
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
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
3
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
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
0
c dot ball1729 at gmail dot com
10 months 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
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
-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
-14
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