curl_getinfo

Get information regarding a specific transfer

&reftitle.description; `mixed` `curl_getinfo` `CurlHandle` `handle` ``int``null```option`&null;

Gets information about the last transfer.

&reftitle.parameters;

&curl.ch.description;

`option`

- This may be one of the following constants:

  - `CURLINFO_EFFECTIVE_URL` - Last effective URL

  - `CURLINFO_HTTP_CODE` - The last response code. As of cURL 7.10.8, this is a legacy alias of `CURLINFO_RESPONSE_CODE`

  - `CURLINFO_FILETIME` - Remote time of the retrieved document, with the `CURLOPT_FILETIME` enabled; if -1 is returned the time of the document is unknown

  - `CURLINFO_TOTAL_TIME` - Total transaction time in seconds for last transfer

  - `CURLINFO_NAMELOOKUP_TIME` - Time in seconds until name resolving was complete

  - `CURLINFO_CONNECT_TIME` - Time in seconds it took to establish the connection

  - `CURLINFO_PRETRANSFER_TIME` - Time in seconds from start until just before file transfer begins

  - `CURLINFO_STARTTRANSFER_TIME` - Time in seconds until the first byte is about to be transferred

  - `CURLINFO_REDIRECT_COUNT` - Number of redirects, with the `CURLOPT_FOLLOWLOCATION` option enabled

  - `CURLINFO_REDIRECT_TIME` - Time in seconds of all redirection steps before final transaction was started, with the `CURLOPT_FOLLOWLOCATION` option enabled

  - `CURLINFO_REDIRECT_URL` - With the `CURLOPT_FOLLOWLOCATION` option disabled: redirect URL found in the last transaction, that should be requested manually next. With the `CURLOPT_FOLLOWLOCATION` option enabled: this is empty. The redirect URL in this case is available in `CURLINFO_EFFECTIVE_URL`

  - `CURLINFO_PRIMARY_IP` - IP address of the most recent connection

  - `CURLINFO_PRIMARY_PORT` - Destination port of the most recent connection

  - `CURLINFO_LOCAL_IP` - Local (source) IP address of the most recent connection

  - `CURLINFO_LOCAL_PORT` - Local (source) port of the most recent connection

  - `CURLINFO_SIZE_UPLOAD` - Total number of bytes uploaded

  - `CURLINFO_SIZE_DOWNLOAD` - Total number of bytes downloaded

  - `CURLINFO_SPEED_DOWNLOAD` - Average download speed

  - `CURLINFO_SPEED_UPLOAD` - Average upload speed

  - `CURLINFO_HEADER_SIZE` - Total size of all headers received

  - `CURLINFO_HEADER_OUT` - The request string sent. For this to work, add the `CURLINFO_HEADER_OUT` option to the handle by calling `curl_setopt`

  - `CURLINFO_REFERER` - The referrer header

  - `CURLINFO_REQUEST_SIZE` - Total size of issued requests, currently only for HTTP requests

  - `CURLINFO_RETRY_AFTER` - The information from the `Retry-After:` header, or zero if there was no valid header.

  - `CURLINFO_SSL_VERIFYRESULT` - Result of SSL certification verification requested by setting `CURLOPT_SSL_VERIFYPEER`

  - `CURLINFO_CONTENT_LENGTH_DOWNLOAD` - Content length of download, read from `Content-Length:` field

  - `CURLINFO_CONTENT_LENGTH_UPLOAD` - Specified size of upload

  - `CURLINFO_CONTENT_TYPE` - `Content-Type:` of the requested document. NULL indicates server did not send valid `Content-Type:` header

  - `CURLINFO_PRIVATE` - Private data associated with this cURL handle, previously set with the `CURLOPT_PRIVATE` option of `curl_setopt`

  - `CURLINFO_PROXY_ERROR` - The detailed (SOCKS) proxy error code when the most recent transfer returned a `CURLE_PROXY` error. The returned value will be exactly one of the `CURLPX_`*`` values. The error code will be `CURLPX_OK` if no response code was available.

  - `CURLINFO_RESPONSE_CODE` - The last response code

  - `CURLINFO_HTTP_CONNECTCODE` - The CONNECT response code

  - `CURLINFO_HTTPAUTH_AVAIL` - Bitmask indicating the authentication method(s) available according to the previous response

  - `CURLINFO_PROXYAUTH_AVAIL` - Bitmask indicating the proxy authentication method(s) available according to the previous response

  - `CURLINFO_OS_ERRNO` - Errno from a connect failure. The number is OS and system specific.

  - `CURLINFO_NUM_CONNECTS` - Number of connections curl had to create to achieve the previous transfer

  - `CURLINFO_SSL_ENGINES` - OpenSSL crypto-engines supported

  - `CURLINFO_COOKIELIST` - All known cookies

  - `CURLINFO_FTP_ENTRY_PATH` - Entry path in FTP server

  - `CURLINFO_APPCONNECT_TIME` - Time in seconds it took from the start until the SSL/SSH connect/handshake to the remote host was completed

  - `CURLINFO_CERTINFO` - TLS certificate chain

  - `CURLINFO_CONDITION_UNMET` - Info on unmet time conditional

  - `CURLINFO_RTSP_CLIENT_CSEQ` - Next RTSP client CSeq

  - `CURLINFO_RTSP_CSEQ_RECV` - Recently received CSeq

  - `CURLINFO_RTSP_SERVER_CSEQ` - Next RTSP server CSeq

  - `CURLINFO_RTSP_SESSION_ID` - RTSP session ID

  - `CURLINFO_CONTENT_LENGTH_DOWNLOAD_T` - The content-length of the download. This is the value read from the `Content-Length:` field. -1 if the size isn't known

  - `CURLINFO_CONTENT_LENGTH_UPLOAD_T` - The specified size of the upload. -1 if the size isn't known

  - `CURLINFO_HTTP_VERSION` - The version used in the last HTTP connection. The return value will be one of the defined `CURL_HTTP_VERSION_*` constants or 0 if the version can't be determined

  - `CURLINFO_PROTOCOL` - The protocol used in the last HTTP connection. The returned value will be exactly one of the `CURLPROTO_*` values

  - `CURLINFO_PROXY_SSL_VERIFYRESULT` - The result of the certificate verification that was requested (using the `CURLOPT_PROXY_SSL_VERIFYPEER` option). Only used for HTTPS proxies

  - `CURLINFO_SCHEME` - The URL scheme used for the most recent connection

  - `CURLINFO_SIZE_DOWNLOAD_T` - Total number of bytes that were downloaded. The number is only for the latest transfer and will be reset again for each new transfer

  - `CURLINFO_SIZE_UPLOAD_T` - Total number of bytes that were uploaded

  - `CURLINFO_SPEED_DOWNLOAD_T` - The average download speed in bytes/second that curl measured for the complete download

  - `CURLINFO_SPEED_UPLOAD_T` - The average upload speed in bytes/second that curl measured for the complete upload

  - `CURLINFO_APPCONNECT_TIME_T` - Time, in microseconds, it took from the start until the SSL/SSH connect/handshake to the remote host was completed

  - `CURLINFO_CONNECT_TIME_T` - Total time taken, in microseconds, from the start until the connection to the remote host (or proxy) was completed

  - `CURLINFO_FILETIME_T` - Remote time of the retrieved document (as Unix timestamp), an alternative to `CURLINFO_FILETIME` to allow systems with 32 bit long variables to extract dates outside of the 32bit timestamp range

  - `CURLINFO_NAMELOOKUP_TIME_T` - Time in microseconds from the start until the name resolving was completed

  - `CURLINFO_PRETRANSFER_TIME_T` - Time taken from the start until the file transfer is just about to begin, in microseconds

  - `CURLINFO_REDIRECT_TIME_T` - Total time, in microseconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before final transaction was started

  - `CURLINFO_STARTTRANSFER_TIME_T` - Time, in microseconds, it took from the start until the first byte is received

  - `CURLINFO_TOTAL_TIME_T` - Total time in microseconds for the previous transfer, including name resolving, TCP connect etc.

&reftitle.returnvalues;

If `option` is given, returns its value. Otherwise, returns an associative array with the following elements (which correspond to `option`), or &false; on failure:

- "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`)

Note that private data is not included in the associative array and must be retrieved individually with the `CURLINFO_PRIVATE` option.
&reftitle.changelog;

&Version; | &Description;
8.2.0 | Introduced `CURLINFO_PROXY_ERROR`, `CURLINFO_REFERER`, `CURLINFO_RETRY_AFTER`.
&curl.changelog.handle-param;
8.0.0 | `option` is nullable now; previously, the default was `0`.
7.3.0 | Introduced `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`.

&reftitle.examples;

### `curl_getinfo` example

    <?php
    // Create a cURL handle
    $ch = curl_init('http://www.example.com/');

    // Execute
    curl_exec($ch);

    // Check if any error occurred
    if (!curl_errno($ch)) {
      $info = curl_getinfo($ch);
      echo 'Took ', $info['total_time'], ' seconds to send a request to ', $info['url'], "\n";
    }

    // Close handle
    curl_close($ch);
    ?>

### `curl_getinfo` example with `option` parameter

    <?php
    // Create a cURL handle
    $ch = curl_init('http://www.example.com/');

    // Execute
    curl_exec($ch);

    // Check HTTP status code
    if (!curl_errno($ch)) {
      switch ($http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
        case 200:  # OK
          break;
        default:
          echo 'Unexpected HTTP code: ', $http_code, "\n";
      }
    }

    // Close handle
    curl_close($ch);
    ?>

&reftitle.notes;

Information gathered by this function is kept if the handle is re-used. This means that unless a statistic is overridden internally by this function, the previous info is returned.