---
name: "curl_easy_getinfo"
section: "3"
platform: "macos"
package: "curl"
version: "166.0.0.0.1"
release: "macOS 26.5"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/curl_easy_getinfo"
---

# curl\_easy\_getinfo(3)

extract information from a curl handle

## NAME

curl\_easy\_getinfo - extract information from a curl handle

## SYNOPSIS

```
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );
```

## DESCRIPTION

Get the *info* kept in the *curl* handle. The third argument **MUST** be pointing to the specific type of the used option which is documented in each man page of the *info* option. The data is stored accordingly and can be relied upon only if this function returns CURLE\_OK. Use this function after a performed transfer if you want to get transfer related data.

You should not free the memory returned by this function unless it is explicitly mentioned below.

## AVAILABLE INFORMATION

The following information can be extracted:

- CURLINFO\_EFFECTIVE\_METHOD

  Last used HTTP method. See *[CURLINFO\_EFFECTIVE\_METHOD(3)](/CURLINFO_EFFECTIVE_METHOD/3.md)*

- CURLINFO\_EFFECTIVE\_URL

  Last used URL. See *[CURLINFO\_EFFECTIVE\_URL(3)](/CURLINFO_EFFECTIVE_URL/3.md)*

- CURLINFO\_RESPONSE\_CODE

  Last received response code. See *[CURLINFO\_RESPONSE\_CODE(3)](/CURLINFO_RESPONSE_CODE/3.md)*

- CURLINFO\_REFERER

  Referrer header. See *[CURLINFO\_REFERER(3)](/CURLINFO_REFERER/3.md)*

- CURLINFO\_HTTP\_CONNECTCODE

  Last proxy CONNECT response code. See *[CURLINFO\_HTTP\_CONNECTCODE(3)](/CURLINFO_HTTP_CONNECTCODE/3.md)*

- CURLINFO\_HTTP\_VERSION

  The http version used in the connection. See *[CURLINFO\_HTTP\_VERSION(3)](/CURLINFO_HTTP_VERSION/3.md)*

- CURLINFO\_FILETIME

  Remote time of the retrieved document. See *[CURLINFO\_FILETIME(3)](/CURLINFO_FILETIME/3.md)*

- CURLINFO\_FILETIME\_T

  Remote time of the retrieved document. See *[CURLINFO\_FILETIME\_T(3)](/CURLINFO_FILETIME_T/3.md)*

- CURLINFO\_TOTAL\_TIME

  Total time of previous transfer. See *[CURLINFO\_TOTAL\_TIME(3)](/CURLINFO_TOTAL_TIME/3.md)*

- CURLINFO\_TOTAL\_TIME\_T

  Total time of previous transfer. See *[CURLINFO\_TOTAL\_TIME\_T(3)](/CURLINFO_TOTAL_TIME_T/3.md)*

- CURLINFO\_NAMELOOKUP\_TIME

  Time from start until name resolving completed. See *[CURLINFO\_NAMELOOKUP\_TIME(3)](/CURLINFO_NAMELOOKUP_TIME/3.md)*

- CURLINFO\_NAMELOOKUP\_TIME\_T

  Time from start until name resolving completed. See *[CURLINFO\_NAMELOOKUP\_TIME\_T(3)](/CURLINFO_NAMELOOKUP_TIME_T/3.md)*

- CURLINFO\_CONNECT\_TIME

  Time from start until remote host or proxy completed. See *[CURLINFO\_CONNECT\_TIME(3)](/CURLINFO_CONNECT_TIME/3.md)*

- CURLINFO\_CONNECT\_TIME\_T

  Time from start until remote host or proxy completed. See *[CURLINFO\_CONNECT\_TIME\_T(3)](/CURLINFO_CONNECT_TIME_T/3.md)*

- CURLINFO\_APPCONNECT\_TIME

  Time from start until SSL/SSH handshake completed. See *[CURLINFO\_APPCONNECT\_TIME(3)](/CURLINFO_APPCONNECT_TIME/3.md)*

- CURLINFO\_APPCONNECT\_TIME\_T

  Time from start until SSL/SSH handshake completed. See *[CURLINFO\_APPCONNECT\_TIME\_T(3)](/CURLINFO_APPCONNECT_TIME_T/3.md)*

- CURLINFO\_PRETRANSFER\_TIME

  Time from start until just before the transfer begins. See *[CURLINFO\_PRETRANSFER\_TIME(3)](/CURLINFO_PRETRANSFER_TIME/3.md)*

- CURLINFO\_PRETRANSFER\_TIME\_T

  Time from start until just before the transfer begins. See *[CURLINFO\_PRETRANSFER\_TIME\_T(3)](/CURLINFO_PRETRANSFER_TIME_T/3.md)*

- CURLINFO\_QUEUE\_TIME\_T

  Time during which this transfer was held in a waiting queue. See *[CURLINFO\_QUEUE\_TIME\_T(3)](/CURLINFO_QUEUE_TIME_T/3.md)*

- CURLINFO\_STARTTRANSFER\_TIME

  Time from start until just when the first byte is received. See *[CURLINFO\_STARTTRANSFER\_TIME(3)](/CURLINFO_STARTTRANSFER_TIME/3.md)*

- CURLINFO\_STARTTRANSFER\_TIME\_T

  Time from start until just when the first byte is received. See *[CURLINFO\_STARTTRANSFER\_TIME\_T(3)](/CURLINFO_STARTTRANSFER_TIME_T/3.md)*

- CURLINFO\_REDIRECT\_TIME

  Time taken for all redirect steps before the final transfer. See *[CURLINFO\_REDIRECT\_TIME(3)](/CURLINFO_REDIRECT_TIME/3.md)*

- CURLINFO\_REDIRECT\_TIME\_T

  Time taken for all redirect steps before the final transfer. See *[CURLINFO\_REDIRECT\_TIME\_T(3)](/CURLINFO_REDIRECT_TIME_T/3.md)*

- CURLINFO\_REDIRECT\_COUNT

  Total number of redirects that were followed. See *[CURLINFO\_REDIRECT\_COUNT(3)](/CURLINFO_REDIRECT_COUNT/3.md)*

- CURLINFO\_REDIRECT\_URL

  URL a redirect would take you to, had you enabled redirects. See *[CURLINFO\_REDIRECT\_URL(3)](/CURLINFO_REDIRECT_URL/3.md)*

- CURLINFO\_SIZE\_UPLOAD

  (Deprecated) Number of bytes uploaded. See *[CURLINFO\_SIZE\_UPLOAD(3)](/CURLINFO_SIZE_UPLOAD/3.md)*

- CURLINFO\_SIZE\_UPLOAD\_T

  Number of bytes uploaded. See *[CURLINFO\_SIZE\_UPLOAD\_T(3)](/CURLINFO_SIZE_UPLOAD_T/3.md)*

- CURLINFO\_SIZE\_DOWNLOAD

  (Deprecated) Number of bytes downloaded. See *[CURLINFO\_SIZE\_DOWNLOAD(3)](/CURLINFO_SIZE_DOWNLOAD/3.md)*

- CURLINFO\_SIZE\_DOWNLOAD\_T

  Number of bytes downloaded. See *[CURLINFO\_SIZE\_DOWNLOAD\_T(3)](/CURLINFO_SIZE_DOWNLOAD_T/3.md)*

- CURLINFO\_SPEED\_DOWNLOAD

  (Deprecated) Average download speed. See *[CURLINFO\_SPEED\_DOWNLOAD(3)](/CURLINFO_SPEED_DOWNLOAD/3.md)*

- CURLINFO\_SPEED\_DOWNLOAD\_T

  Average download speed. See *[CURLINFO\_SPEED\_DOWNLOAD\_T(3)](/CURLINFO_SPEED_DOWNLOAD_T/3.md)*

- CURLINFO\_SPEED\_UPLOAD

  (Deprecated) Average upload speed. See *[CURLINFO\_SPEED\_UPLOAD(3)](/CURLINFO_SPEED_UPLOAD/3.md)*

- CURLINFO\_SPEED\_UPLOAD\_T

  Average upload speed. See *[CURLINFO\_SPEED\_UPLOAD\_T(3)](/CURLINFO_SPEED_UPLOAD_T/3.md)*

- CURLINFO\_HEADER\_SIZE

  Number of bytes of all headers received. See *[CURLINFO\_HEADER\_SIZE(3)](/CURLINFO_HEADER_SIZE/3.md)*

- CURLINFO\_REQUEST\_SIZE

  Number of bytes sent in the issued HTTP requests. See *[CURLINFO\_REQUEST\_SIZE(3)](/CURLINFO_REQUEST_SIZE/3.md)*

- CURLINFO\_SSL\_VERIFYRESULT

  Certificate verification result. See *[CURLINFO\_SSL\_VERIFYRESULT(3)](/CURLINFO_SSL_VERIFYRESULT/3.md)*

- CURLINFO\_PROXY\_ERROR

  Detailed proxy error. See *[CURLINFO\_PROXY\_ERROR(3)](/CURLINFO_PROXY_ERROR/3.md)*

- CURLINFO\_PROXY\_SSL\_VERIFYRESULT

  Proxy certificate verification result. See *[CURLINFO\_PROXY\_SSL\_VERIFYRESULT(3)](/CURLINFO_PROXY_SSL_VERIFYRESULT/3.md)*

- CURLINFO\_SSL\_ENGINES

  A list of OpenSSL crypto engines. See *[CURLINFO\_SSL\_ENGINES(3)](/CURLINFO_SSL_ENGINES/3.md)*

- CURLINFO\_CONTENT\_LENGTH\_DOWNLOAD

  (Deprecated) Content length from the Content-Length header. See *[CURLINFO\_CONTENT\_LENGTH\_DOWNLOAD(3)](/CURLINFO_CONTENT_LENGTH_DOWNLOAD/3.md)*

- CURLINFO\_CONTENT\_LENGTH\_DOWNLOAD\_T

  Content length from the Content-Length header. See *[CURLINFO\_CONTENT\_LENGTH\_DOWNLOAD\_T(3)](/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T/3.md)*

- CURLINFO\_CONTENT\_LENGTH\_UPLOAD

  (Deprecated) Upload size. See *[CURLINFO\_CONTENT\_LENGTH\_UPLOAD(3)](/CURLINFO_CONTENT_LENGTH_UPLOAD/3.md)*

- CURLINFO\_CONTENT\_LENGTH\_UPLOAD\_T

  Upload size. See *[CURLINFO\_CONTENT\_LENGTH\_UPLOAD\_T(3)](/CURLINFO_CONTENT_LENGTH_UPLOAD_T/3.md)*

- CURLINFO\_CONTENT\_TYPE

  Content type from the Content-Type header. See *[CURLINFO\_CONTENT\_TYPE(3)](/CURLINFO_CONTENT_TYPE/3.md)*

- CURLINFO\_RETRY\_AFTER

  The value from the Retry-After header. See *[CURLINFO\_RETRY\_AFTER(3)](/CURLINFO_RETRY_AFTER/3.md)*

- CURLINFO\_PRIVATE

  User's private data pointer. See *[CURLINFO\_PRIVATE(3)](/CURLINFO_PRIVATE/3.md)*

- CURLINFO\_HTTPAUTH\_AVAIL

  Available HTTP authentication methods. See *[CURLINFO\_HTTPAUTH\_AVAIL(3)](/CURLINFO_HTTPAUTH_AVAIL/3.md)*

- CURLINFO\_PROXYAUTH\_AVAIL

  Available HTTP proxy authentication methods. See *[CURLINFO\_PROXYAUTH\_AVAIL(3)](/CURLINFO_PROXYAUTH_AVAIL/3.md)*

- CURLINFO\_OS\_ERRNO

  The errno from the last failure to connect. See *[CURLINFO\_OS\_ERRNO(3)](/CURLINFO_OS_ERRNO/3.md)*

- CURLINFO\_NUM\_CONNECTS

  Number of new successful connections used for previous transfer. See *[CURLINFO\_NUM\_CONNECTS(3)](/CURLINFO_NUM_CONNECTS/3.md)*

- CURLINFO\_PRIMARY\_IP

  Destination IP address of the last connection. See *[CURLINFO\_PRIMARY\_IP(3)](/CURLINFO_PRIMARY_IP/3.md)*

- CURLINFO\_PRIMARY\_PORT

  Destination port of the last connection. See *[CURLINFO\_PRIMARY\_PORT(3)](/CURLINFO_PRIMARY_PORT/3.md)*

- CURLINFO\_LOCAL\_IP

  Source IP address of the last connection. See *[CURLINFO\_LOCAL\_IP(3)](/CURLINFO_LOCAL_IP/3.md)*

- CURLINFO\_LOCAL\_PORT

  Source port number of the last connection. See *[CURLINFO\_LOCAL\_PORT(3)](/CURLINFO_LOCAL_PORT/3.md)*

- CURLINFO\_COOKIELIST

  List of all known cookies. See *[CURLINFO\_COOKIELIST(3)](/CURLINFO_COOKIELIST/3.md)*

- CURLINFO\_LASTSOCKET

  (Deprecated) Last socket used. See *[CURLINFO\_LASTSOCKET(3)](/CURLINFO_LASTSOCKET/3.md)*

- CURLINFO\_ACTIVESOCKET

  The session's active socket. See *[CURLINFO\_ACTIVESOCKET(3)](/CURLINFO_ACTIVESOCKET/3.md)*

- CURLINFO\_FTP\_ENTRY\_PATH

  The entry path after logging in to an FTP server. See *[CURLINFO\_FTP\_ENTRY\_PATH(3)](/CURLINFO_FTP_ENTRY_PATH/3.md)*

- CURLINFO\_CAPATH

  Get the default value for *[CURLOPT\_CAPATH(3)](/CURLOPT_CAPATH/3.md)*. See *[CURLINFO\_CAPATH(3)](/CURLINFO_CAPATH/3.md)*

- CURLINFO\_CAINFO

  Get the default value for *[CURLOPT\_CAINFO(3)](/CURLOPT_CAINFO/3.md)*. See *[CURLINFO\_CAINFO(3)](/CURLINFO_CAINFO/3.md)*

- CURLINFO\_CERTINFO

  Certificate chain. See *[CURLINFO\_CERTINFO(3)](/CURLINFO_CERTINFO/3.md)*

- CURLINFO\_TLS\_SSL\_PTR

  TLS session info that can be used for further processing. See *[CURLINFO\_TLS\_SSL\_PTR(3)](/CURLINFO_TLS_SSL_PTR/3.md)*

- CURLINFO\_TLS\_SESSION

  TLS session info that can be used for further processing. See *[CURLINFO\_TLS\_SESSION(3)](/CURLINFO_TLS_SESSION/3.md)*. Deprecated option, use *[CURLINFO\_TLS\_SSL\_PTR(3)](/CURLINFO_TLS_SSL_PTR/3.md)* instead!

- CURLINFO\_CONDITION\_UNMET

  Whether or not a time conditional was met or 304 HTTP response. See *[CURLINFO\_CONDITION\_UNMET(3)](/CURLINFO_CONDITION_UNMET/3.md)*

- CURLINFO\_RTSP\_SESSION\_ID

  RTSP session ID. See *[CURLINFO\_RTSP\_SESSION\_ID(3)](/CURLINFO_RTSP_SESSION_ID/3.md)*

- CURLINFO\_RTSP\_CLIENT\_CSEQ

  The RTSP client CSeq that is expected next. See *[CURLINFO\_RTSP\_CLIENT\_CSEQ(3)](/CURLINFO_RTSP_CLIENT_CSEQ/3.md)*

- CURLINFO\_RTSP\_SERVER\_CSEQ

  The RTSP server CSeq that is expected next. See *[CURLINFO\_RTSP\_SERVER\_CSEQ(3)](/CURLINFO_RTSP_SERVER_CSEQ/3.md)*

- CURLINFO\_RTSP\_CSEQ\_RECV

  RTSP CSeq last received. See *[CURLINFO\_RTSP\_CSEQ\_RECV(3)](/CURLINFO_RTSP_CSEQ_RECV/3.md)*

- CURLINFO\_PROTOCOL

  (Deprecated) The protocol used for the connection. (Added in 7.52.0) See *[CURLINFO\_PROTOCOL(3)](/CURLINFO_PROTOCOL/3.md)*

- CURLINFO\_SCHEME

  The scheme used for the connection. (Added in 7.52.0) See *[CURLINFO\_SCHEME(3)](/CURLINFO_SCHEME/3.md)*

- CURLINFO\_CONN\_ID

  The ID of the last connection used by the transfer. (Added in 8.2.0) See *[CURLINFO\_CONN\_ID(3)](/CURLINFO_CONN_ID/3.md)*

- CURLINFO\_XFER\_ID

  The ID of the transfer. (Added in 8.2.0) See *[CURLINFO\_XFER\_ID(3)](/CURLINFO_XFER_ID/3.md)*

## TIMES

An overview of the time values available from *[curl\_easy\_getinfo(3)](/curl_easy_getinfo/3.md)*

```
curl_easy_perform()
    |
    |--QUEUE_TIME
    |--|--NAMELOOKUP
    |--|--|--CONNECT
    |--|--|--|--APPCONNECT
    |--|--|--|--|--PRETRANSFER
    |--|--|--|--|--|--STARTTRANSFER
    |--|--|--|--|--|--|--TOTAL
    |--|--|--|--|--|--|--REDIRECT
```

- QUEUE\_TIME

  *[CURLINFO\_QUEUE\_TIME\_T(3)](/CURLINFO_QUEUE_TIME_T/3.md)*. The time during which the transfer was held in a waiting queue before it could start for real. (Added in 8.6.0)

- NAMELOOKUP

  *[CURLINFO\_NAMELOOKUP\_TIME(3)](/CURLINFO_NAMELOOKUP_TIME/3.md)* and *[CURLINFO\_NAMELOOKUP\_TIME\_T(3)](/CURLINFO_NAMELOOKUP_TIME_T/3.md)*. The time it took from the start until the name resolving was completed.

- CONNECT

  *[CURLINFO\_CONNECT\_TIME(3)](/CURLINFO_CONNECT_TIME/3.md)* and *[CURLINFO\_CONNECT\_TIME\_T(3)](/CURLINFO_CONNECT_TIME_T/3.md)*. The time it took from the start until the connect to the remote host (or proxy) was completed.

- APPCONNECT

  *[CURLINFO\_APPCONNECT\_TIME(3)](/CURLINFO_APPCONNECT_TIME/3.md)* and *[CURLINFO\_APPCONNECT\_TIME\_T(3)](/CURLINFO_APPCONNECT_TIME_T/3.md)*. The time it took from the start until the SSL connect/handshake with the remote host was completed. (Added in 7.19.0) The latter is the integer version (measuring microseconds). (Added in 7.60.0)

- PRETRANSFER

  *[CURLINFO\_PRETRANSFER\_TIME(3)](/CURLINFO_PRETRANSFER_TIME/3.md)* and *[CURLINFO\_PRETRANSFER\_TIME\_T(3)](/CURLINFO_PRETRANSFER_TIME_T/3.md)*. The time it took from the start until the file transfer is just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.

- STARTTRANSFER

  *[CURLINFO\_STARTTRANSFER\_TIME(3)](/CURLINFO_STARTTRANSFER_TIME/3.md)* and *[CURLINFO\_STARTTRANSFER\_TIME\_T(3)](/CURLINFO_STARTTRANSFER_TIME_T/3.md)*. The time it took from the start until the first byte is received by libcurl.

- TOTAL

  *[CURLINFO\_TOTAL\_TIME(3)](/CURLINFO_TOTAL_TIME/3.md)* and *[CURLINFO\_TOTAL\_TIME\_T(3)](/CURLINFO_TOTAL_TIME_T/3.md)*. Total time of the previous request.

- REDIRECT

  *[CURLINFO\_REDIRECT\_TIME(3)](/CURLINFO_REDIRECT_TIME/3.md)* and *[CURLINFO\_REDIRECT\_TIME\_T(3)](/CURLINFO_REDIRECT_TIME_T/3.md)*. The time it took for all redirection steps include name lookup, connect, pretransfer and transfer before final transaction was started. So, this is zero if no redirection took place.

## EXAMPLE

```
int main(void)
{
  CURL *curl = curl_easy_init();
  if(curl) {
    CURLcode res;
    curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");
    res = curl_easy_perform(curl);
    if(CURLE_OK == res) {
      char *ct;
      /* ask for the content-type */
      res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
      if((CURLE_OK == res) && ct)
        printf("We received Content-Type: %s\n", ct);
    }
    /* always cleanup */
    curl_easy_cleanup(curl);
  }
}
```

## AVAILABILITY

Added in 7.4.1

## RETURN VALUE

If the operation was successful, CURLE\_OK is returned. Otherwise an appropriate error code is returned.

## SEE ALSO

[**curl\_easy\_setopt**(3)](/curl_easy_setopt/3.md)
