Search
K

Post transfer info

Remember how libcurl transfers are associated with an "easy handle"! Each transfer has such a handle and when a transfer is completed, before the handle is cleaned or reused for another transfer, it can be used to extract information from the previous operation.
Your friend for doing this is called curl_easy_getinfo() and you tell it which specific information you are interested in and it will return that to you if it can.
When you use this function, you pass in the easy handle, which information you want and a pointer to a variable to hold the answer. You must pass in a pointer to a variable of the correct type or you risk that things will go side-ways. These information values are designed to be provided after the transfer is completed.
The data you receive can be a long, a 'char *', a 'struct curl_slist *', a double or a socket.
This is how you extract the Content-Type: value from the previous HTTP transfer:
CURLcode res;
char *content_type;
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &content_type);
If you want to extract the local port number that was used in that connection:
CURLcode res;
long port_number;
res = curl_easy_getinfo(curl, CURLINFO_LOCAL_PORT, &port_number);

Available information

Getinfo option
Type
Description
CURLINFO_ACTIVESOCKET
curl_socket_t
The session's active socket
CURLINFO_APPCONNECT_TIME
double
Time from start until SSL/SSH handshake completed
CURLINFO_APPCONNECT_TIME_T
curl_off_t
Time from start until SSL/SSH handshake completed (in microseconds)
CURLINFO_CERTINFO
struct curl_slist *
Certificate chain
CURLINFO_CONDITION_UNMET
long
Whether or not a time conditional was met
CURLINFO_CONNECT_TIME
double
Time from start until remote host or proxy completed
CURLINFO_CONNECT_TIME_T
curl_off_t
Time from start until remote host or proxy completed (in microseconds)
CURLINFO_CONTENT_LENGTH_DOWNLOAD
double
Content length from the Content-Length header
CURLINFO_CONTENT_LENGTH_UPLOAD
double
Upload size
CURLINFO_CONTENT_TYPE
char *
Content type from the Content-Type header
CURLINFO_COOKIELIST
struct curl_slist *
List of all known cookies
CURLINFO_EFFECTIVE_METHOD
char *
Last used HTTP request method
CURLINFO_EFFECTIVE_URL
char *
Last used URL
CURLINFO_FILETIME
long
Remote time of the retrieved document
CURLINFO_FTP_ENTRY_PATH
char *
The entry path after logging in to an FTP server
CURLINFO_HEADER_SIZE
long
Number of bytes of all headers received
CURLINFO_HTTP_CONNECTCODE
long
Last proxy CONNECT response code
CURLINFO_HTTP_VERSION
long
The HTTP version used in the connection
CURLINFO_HTTPAUTH_AVAIL
long
Available HTTP authentication methods (bitmask)
CURLINFO_LASTSOCKET
long
Last socket used
CURLINFO_LOCAL_IP
char *
Local-end IP address of last connection
CURLINFO_LOCAL_PORT
long
Local-end port of last connection
CURLINFO_NAMELOOKUP_TIME
double
Time from start until name resolving completed
CURLINFO_NAMELOOKUP_TIME_T
curl_off_t
Time from start until name resolving completed (in microseconds)
CURLINFO_NUM_CONNECTS
long
Number of new successful connections used for previous transfer
CURLINFO_OS_ERRNO
long
The errno from the last failure to connect
CURLINFO_PRETRANSFER_TIME
double
Time from start until just before the transfer begins
CURLINFO_PRETRANSFER_TIME_T
curl_off_T
Time from start until just before the transfer begins (in microseconds)
CURLINFO_PRIMARY_IP
char *
IP address of the last connection
CURLINFO_PRIMARY_PORT
long
Port of the last connection
CURLINFO_PRIVATE
char *
User's private data pointer
CURLINFO_PROTOCOL
long
The protocol used for the connection
CURLINFO_PROXY_ERROR
long
Detailed (SOCKS) proxy error if CURLE_PROXY was returned from the transfer
CURLINFO_PROXY_SSL_VERIFYRESULT
long
Proxy certificate verification result
CURLINFO_PROXYAUTH_AVAIL
long
Available HTTP proxy authentication methods
CURLINFO_REDIRECT_COUNT
long
Total number of redirects that were followed
CURLINFO_REDIRECT_TIME
double
Time taken for all redirect steps before the final transfer
CURLINFO_REDIRECT_TIME_T
curl_off_t
Time taken for all redirect steps before the final transfer (in microseconds)
CURLINFO_REDIRECT_URL
char *
URL a redirect would take you to, had you enabled redirects
CURLINFO_REQUEST_SIZE
long
Number of bytes sent in the issued HTTP requests
CURLINFO_RESPONSE_CODE
long
Last received response code
CURLINFO_RETRY_AFTER
curl_off_t
The value from the response Retry-After: header
CURLINFO_RTSP_CLIENT_CSEQ
long
RTSP CSeq that will next be used
CURLINFO_RTSP_CSEQ_RECV
long
RTSP CSeq last received
CURLINFO_RTSP_SERVER_CSEQ
long
RTSP CSeq that will next be expected
CURLINFO_RTSP_SESSION_ID
char *
RTSP session ID
CURLINFO_SCHEME
char *
The scheme used for the connection
CURLINFO_SIZE_DOWNLOAD
double
Number of bytes downloaded
CURLINFO_SIZE_UPLOAD
double
Number of bytes uploaded
CURLINFO_SPEED_DOWNLOAD
double
Average download speed
CURLINFO_SPEED_UPLOAD
double
Average upload speed
CURLINFO_SSL_ENGINES
struct curl_slist *
A list of OpenSSL crypto engines
CURLINFO_SSL_VERIFYRESULT
long
Certificate verification result
CURLINFO_STARTTRANSFER_TIME
double
Time from start until just when the first byte is received
CURLINFO_STARTTRANSFER_TIME_T
curl_off_t
Time from start until just when the first byte is received (in microseconds)
CURLINFO_TLS_SSL_PTR
struct curl_slist *
TLS session info that can be used for further processing
CURLINFO_TOTAL_TIME
double
Total time of previous transfer
CURLINFO_TOTAL_TIME_T
curl_off_t
Total time of previous transfer (in microseconds)