PHP 7.0.0 Beta 2 Released

curl_getinfo

(PHP 4 >= 4.0.4, PHP 5)

curl_getinfo指定した伝送に関する情報を得る

説明

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

直近の転送に関する情報を取得します。

パラメータ

ch

curl_init() が返す cURL ハンドル。

opt

これは、以下のいずれかの定数となります。

  • CURLINFO_EFFECTIVE_URL - 直近の有効な URL
  • CURLINFO_HTTP_CODE - 最後に受け取った HTTP コード
  • CURLINFO_FILETIME - ドキュメントを取得するのにかかった時間。 取得できなかった場合は -1
  • CURLINFO_TOTAL_TIME - 直近の伝送にかかった秒数
  • CURLINFO_NAMELOOKUP_TIME - 名前解決が完了するまでにかかった秒数
  • CURLINFO_CONNECT_TIME - 接続を確立するまでにかかった秒数
  • CURLINFO_PRETRANSFER_TIME - 開始からファイル伝送がはじまるまでにかかった秒数
  • CURLINFO_STARTTRANSFER_TIME - 最初のバイトの伝送がはじまるまでの秒数
  • CURLINFO_REDIRECT_COUNT - リダイレクト処理の回数 (CURLOPT_FOLLOWLOCATION オプションが有効な場合)
  • CURLINFO_REDIRECT_TIME - 伝送が始まるまでのリダイレクト処理の秒数 (CURLOPT_FOLLOWLOCATION オプションが有効な場合)
  • CURLINFO_REDIRECT_URL - CURLOPT_FOLLOWLOCATION オプションが無効な場合: 直近のトランザクションで見つかったリダイレクト先 URL。これを、次に手動でリクエストしなければいけません。 CURLOPT_FOLLOWLOCATION オプションが有効な場合: これは空になります。 この場合のリダイレクト先 URL は、CURLINFO_EFFECTIVE_URL となります。
  • CURLINFO_PRIMARY_IP - 直近の接続の IP アドレス
  • CURLINFO_PRIMARY_PORT - 直近の接続の接続先ポート
  • CURLINFO_LOCAL_IP - 直近の接続の接続元 IP アドレス
  • CURLINFO_LOCAL_PORT - 直近の接続の接続元ポート
  • CURLINFO_SIZE_UPLOAD - アップロードされたバイト数
  • CURLINFO_SIZE_DOWNLOAD - ダウンロードされたバイト数
  • CURLINFO_SPEED_DOWNLOAD - 平均のダウンロード速度
  • CURLINFO_SPEED_UPLOAD - 平均のアップロード速度
  • CURLINFO_HEADER_SIZE - 受信したヘッダのサイズ
  • CURLINFO_HEADER_OUT - 送信したリクエスト文字列。 これを動作させるには、curl_setopt() をコールする際に CURLINFO_HEADER_OUT オプションを使うようにしておく必要があります。
  • CURLINFO_REQUEST_SIZE - 発行されたリクエストのサイズ。現在は HTTP リクエストの場合のみ
  • CURLINFO_SSL_VERIFYRESULT - CURLOPT_SSL_VERIFYPEER を設定した際に要求される SSL 証明書の認証結果
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD - ダウンロードされるサイズ。 Content-Length: フィールドの内容を取得する
  • CURLINFO_CONTENT_LENGTH_UPLOAD - アップロードされるサイズ。
  • CURLINFO_CONTENT_TYPE - 要求されたドキュメントの Content-Type:。 NULL は、サーバーが適切な Content-Type: ヘッダを返さなかったことを示す
  • CURLINFO_PRIVATE - この cURL ハンドルに関連づけられたプライベートデータ。 事前に curl_setopt()CURLOPT_PRIVATE オプションで設定したもの。

返り値

opt を指定した場合は、その値を返します。 それ以外の場合は、以下の要素をもつ連想配列を返します (それぞれの要素が opt に対応します)。 失敗した場合は FALSE を返します。

  • "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" (これが設定されるのは、事前に curl_setopt() をコールしたときに CURLINFO_HEADER_OUT を設定した場合のみです)
プライベートデータはこの連想配列には含まれず、CURLINFO_PRIVATE オプションで個別に取得しなければいけないことに注意しましょう。

変更履歴

バージョン 説明
5.4.7 CURLINFO_PRIMARY_IPCURLINFO_PRIMARY_PORTCURLINFO_LOCAL_IP および CURLINFO_LOCAL_PORT が追加されました。
5.3.7 CURLINFO_REDIRECT_URL が追加されました。
5.2.4 CURLINFO_PRIVATE が追加されました。
5.1.3 CURLINFO_HEADER_OUT が追加されました。

例1 curl_getinfo() の例

<?php
// curl ハンドルを作成します
$ch curl_init('http://www.yahoo.com/');

// 実行します
curl_exec($ch);

// エラーが発生したかどうかを確認します
if(!curl_errno($ch))
{
 
$info curl_getinfo($ch);

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

// ハンドルを閉じます
curl_close($ch);
?>

注意

注意:

この関数で収集した情報を、ハンドルを再利用するとそのまま保持されます。 つまり、この関数で内部的に統計情報を上書きしない限りは以前の情報が返されるということです。

add a note add a note

User Contributed Notes 11 notes

up
21
ssttoo at hotmail dot com
11 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
6
bg at enativ dot com
1 year 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
7 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
3
nemetral
7 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
2
Anonymous
5 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
nikita dot bulatenko at gmail dot com
2 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
1
vince
4 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
0
Curly
3 months 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
qrworld.net
8 months 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
-2
luiheidsgoeroe at hotmail dot com
7 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
-13
Piker
1 year ago
Example 1 should use "if(curl_errno($ch))" not "if(!curl_errno($ch))"
To Top