curl_getinfo

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

curl_getinfoBelli bir oturum ile ilgili bilgi döndürür

Açıklama

curl_getinfo(CurlHandle $tanıtıcı, ?int $seçenek = null): mixed

Belirtilen tanıtıcı ile ilgili son aktarım hakkında bilgi verir.

Değiştirgeler

tanıtıcı

curl_init() işlevinden dönen bir cURL tanıtıcısı.

seçenek

Şu sabitlerden biri olabilir:

  • CURLINFO_EFFECTIVE_URL - Etkin son URL.
  • CURLINFO_HTTP_CODE - Alınan son yanıt kodu. cURL 7.10.8 itibariyle, bu sabit CURLINFO_RESPONSE_CODE sabitinin takma adıdır.
  • CURLINFO_FILETIME - CURLOPT_FILETIME etkinken belgenin karşıdan alınma süresi; -1 ise süre bilinmiyor demektir.
  • CURLINFO_TOTAL_TIME - Saniye cinsinden son aktarımın toplam süresi.
  • CURLINFO_NAMELOOKUP_TIME - Saniye cinsinden isim çözümlenene kadar geçen süre.
  • CURLINFO_CONNECT_TIME - Saniye cinsinden bağlantı kurulana kadar geçen süre.
  • CURLINFO_PRETRANSFER_TIME - Saniye cinsinden başlangıçtan aktarım başlayana kadar geçen süre.
  • CURLINFO_STARTTRANSFER_TIME - Saniye cinsinden ilk bayt aktarılana kadar geçen süre.
  • CURLINFO_REDIRECT_COUNT - CURLOPT_FOLLOWLOCATION etkinken, yönlendirme sayısı.
  • CURLINFO_REDIRECT_TIME - CURLOPT_FOLLOWLOCATION etkinken, saniye cinsinden son aktarım başlayana kadar tüm yönlendirme adımlarının süresi.
  • CURLINFO_REDIRECT_URL - CURLOPT_FOLLOWLOCATION etkin değilken: son aktarımda bulunan yönlendirme URL'si; sonradan elle istenmesi gerekir. CURLOPT_FOLLOWLOCATION etkinken: bu boştur. Bu durumda yönlendirme URL'si CURLINFO_EFFECTIVE_URL'de bulunur.
  • CURLINFO_PRIMARY_IP - En son bağlanının IP adresi.
  • CURLINFO_PRIMARY_PORT - En son bağlanının hedef portu.
  • CURLINFO_LOCAL_IP - En son bağlanının yerel (kaynak) IP adresi.
  • CURLINFO_LOCAL_PORT - En son bağlanının yerel (kaynak) portu.
  • CURLINFO_SIZE_UPLOAD - Karşıya yüklenen toplam bayt sayısı.
  • CURLINFO_SIZE_DOWNLOAD - İndirilen toplam bayt sayısı.
  • CURLINFO_SPEED_DOWNLOAD - Ortalama indirme hızı.
  • CURLINFO_SPEED_UPLOAD - Ortalama karşıya yükleme hızı.
  • CURLINFO_HEADER_SIZE - Alınan tüm başlıkların toplam boyutu.
  • CURLINFO_HEADER_OUT - Gönderilen istek dizgesi. Bunun çalışması için, curl_setopt() çağrılarak tanıtıcıya CURLINFO_HEADER_OUT seçeneği eklenmelidir.
  • CURLINFO_REQUEST_SIZE - Toplam istek boyutu; şimdilik sadece HTTP istekleri için.
  • CURLINFO_SSL_VERIFYRESULT - CURLOPT_SSL_VERIFYPEER atanarak istenen SSL sertifikalarının doğrulanmasının sonucu.
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD - Content-Length: başlığından okunan indirilen içerik uzunluğu.
  • CURLINFO_CONTENT_LENGTH_UPLOAD - Belirtilen karşıya yükleme boyutu.
  • CURLINFO_CONTENT_TYPE - İstenenbelgenin Content-Type: başlığının değeri; null değeri sunucunun geçerli bir Content-Type: başlığı göndermediği anlamına gelir.
  • CURLINFO_PRIVATE - curl_setopt() işlevinin CURLOPT_PRIVATE seçeneği ile evvelce atanmış, bu cURL tanıtıcısı ile ilişkili özel veri.
  • CURLINFO_RESPONSE_CODE - Son yanıt kodu
  • CURLINFO_HTTP_CONNECTCODE - CONNECT yanıt kodu
  • CURLINFO_HTTPAUTH_AVAIL - önceki yanıta göre, kullanılabilen kimlik kanıtlama yöntemlerini gösteren bit maskesi.
  • CURLINFO_PROXYAUTH_AVAIL - Önceki yanıta göre kullanılabilen vekil kimlik kanıtlama yöntemlerini gösteren bit maskesi.
  • CURLINFO_OS_ERRNO - Bir bağlantı hatasındaki hata numarası. Numara, işletim sistemine ve sisteme özeldir.
  • CURLINFO_NUM_CONNECTS - Önceki aktarımı gerçekleştirmek için curl tarafından oluşturulması gereken bağlantı sayısı.
  • CURLINFO_SSL_ENGINES - OpenSSL kripto motorları desteklenir.
  • CURLINFO_COOKIELIST - Bilinen tüm çerezler
  • CURLINFO_FTP_ENTRY_PATH - FTP sunucusundaki girdi yolu.
  • CURLINFO_APPCONNECT_TIME - Uzak konağa SSL/SSH bağlantısı/anlaşması tamamlanana kadar başlangıçtan itibaren geçen saniye cinsinden süre
  • CURLINFO_CERTINFO - TLS sertifika zinciri
  • CURLINFO_CONDITION_UNMET - Karşılanmayan süre koşulu hakkında bilgi.
  • CURLINFO_RTSP_CLIENT_CSEQ - Sonraki RTSP istemci CSeq
  • CURLINFO_RTSP_CSEQ_RECV - Son alınan CSeq
  • CURLINFO_RTSP_SERVER_CSEQ - Sonraki RTSP sunucu CSeq
  • CURLINFO_RTSP_SESSION_ID - RTSP oturum kimiliği
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD_T - İndirmenin içerik uzunluğu. Bu değer, Content-Type: başlığından okunur. Boyut bilinmiyorsa -1
  • CURLINFO_CONTENT_LENGTH_UPLOAD_T - Yüklemenin belirtilen boyutu. Boyut bilinmiyorsa -1
  • CURLINFO_HTTP_VERSION - Son HTTP bağlantısında kullanılan sürüm. Dönüş değeri, tanımlı CURL_HTTP_VERSION_* sabitlerinden biri veya sürüm belirlenemiyorsa 0 olacaktır
  • CURLINFO_PROTOCOL - Son HTTP bağlantısında kullanılan protokol. Döndürülen değer kesin olarak CURLPROTO_* değerlerinden biri olacaktır.
  • CURLINFO_PROXY_SSL_VERIFYRESULT - İstenen sertifika doğrulamasının sonucu (CURLOPT_PROXY_SSL_VERIFYPEER seçeneği kullanılarak). Yalnızca HTTPS vekilleri için kullanılır.
  • CURLINFO_SCHEME - En son bağlantıda kullanılan URL şeması
  • CURLINFO_SIZE_DOWNLOAD_T - İndirilen toplam bayt sayısı. Sayı yalnızca en son aktarım içindir ve her yeni aktarım için sıfırlanır.
  • CURLINFO_SIZE_UPLOAD_T - Yüklenen toplam bayt sayısı
  • CURLINFO_SPEED_DOWNLOAD_T - Tam indirme için curl'un ölçtüğü bayt/saniye cinsinden ortalama indirme hızı.
  • CURLINFO_SPEED_UPLOAD_T - Tam yükleme için curl'un ölçtüğü bayt/saniye cinsinden ortalama yükleme hızı.
  • CURLINFO_APPCONNECT_TIME_T - Başlangıçtan uzak konağa SSL/SSH bağlantısı/anlaşması tamamlanana kadar geçen mikrosaniye cinsinden süre.
  • CURLINFO_CONNECT_TIME_T - Uzak konağa (veya vekile) bağlantı tamamlanana kadar başlangıştan itibaren geçen mikrosaniye cinsinden toplam süre.
  • CURLINFO_FILETIME_T - Alınan belgenin uzaktan alınma zamanı (Unix zaman damgası olarak), 32 bitlik sistemlerin 32 bit zaman damgası aralığı dışındaki tarihleri ayıklamasını sağlamak için bir CURLINFO_FILETIME seçeneği.
  • CURLINFO_NAMELOOKUP_TIME_T - İsim çözümlemesi tamamlanana kadar başlangıçtan itibaren geçen milisaniye cinsinden süre.
  • CURLINFO_PRETRANSFER_TIME_T - Dosya aktarımı başlayana kadar başlangıçtan itibaren geçen milisaniye cinsinden süre.
  • CURLINFO_REDIRECT_TIME_T - Mikrosaniye cinsinden tüm yönlendirme adımları için geçen toplam süre, son işlem başlamadan önce ad arama, bağlanma, ön aktarımı ve aktarımı içerir.
  • CURLINFO_STARTTRANSFER_TIME_T - Başlangıçtan ilk bayt alınıncaya kadar geçen milisaniye cinsinden süre.
  • CURLINFO_TOTAL_TIME_T - Ad çözümleme, TCP bağlantısı vb. dahil olmak üzere önceki aktarım için mikrosaniye cinsinden toplam süre.

Dönen Değerler

seçenek belirtilirse, seçeneğin değeri bir dizge olarak döndürülür. Aksi takdirde aşağıdaki elemanları içeren bir dizi veya başarısızlık durumunda false döner:

  • "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" (This is only set if the CURLINFO_HEADER_OUT is set by a previous call to curl_setopt())
Özel veriler ilişkisel diziye dahil olmadığı ve CURLINFO_PRIVATE seçeneğiyle tek tek alınması gerektiği unutulmamalıdır.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0tanıtıcı için artık bir CurlHandle örneği bekleniyor; evvelce, resource türünde bir değer beklenirdi.
8.0.0 seçenek artık null olabiliyor; evvelce 0 öntanımlı değerdi.
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 devreye girdi.

Örnekler

Örnek 1 - curl_getinfo() örneği

<?php
// Yeni bir tanıtıcı oluşturalım
$ch curl_init('http://www.example.com/');

// Çalıştıralım
curl_exec($ch);

// Bir hata var mı bakalım
if(!curl_errno($ch)) {
   
$info curl_getinfo($ch);
   echo 
'İsteğin' $info['url'] . ' adresine gönderilmesi ' .
       
$info['total_time'] . ' saniye sürdü';
}

// Tanıtıcıyı kapatalım
curl_close($ch);
?>

Örnek 2 - seçenek değiştirgeli curl_getinfo() örneği

<?php
// Bir cURL tanıtıcısı oluştur
$ch curl_init('http://www.example.com/');

// Çalıştır
curl_exec($ch);

// HTTP durum koduna bak
if (!curl_errno($ch)) {
  switch (
$http_code curl_getinfo($chCURLINFO_HTTP_CODE)) {
    case 
200:  # OK
      
break;
    default:
      echo 
'Beklenmedik HTTP kodu: '$http_code"\n";
  }
 }
curl_close($ch);
?>

Notlar

Bilginize:

Tanıtıcı yeniden kullanılırsa işlev tarafından toplanan veri tutulur. Yani, bir istatistik bu işlev tarafından dahili olarak geçersiz kılınmadıkça önceki bilgi döner.

add a note add a note

User Contributed Notes 13 notes

up
58
ssttoo at hotmail dot com
17 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
7 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
16
nikita dot bulatenko at gmail dot com
8 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
16
vince
11 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
4
public-mail at alekciy dot ru
6 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
7 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
5
Mark Evers
13 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
5
nemetral
13 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
0
Curly
6 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
11 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
6 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
13 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
-57
Piker
7 years ago
Example 1 should use "if(curl_errno($ch))" not "if(!curl_errno($ch))"
To Top