mirror of
https://github.com/moparisthebest/curl
synced 2024-12-23 08:38:49 -05:00
08d95bff5e
errno is not reset on success.
253 lines
13 KiB
Groff
253 lines
13 KiB
Groff
.\" **************************************************************************
|
|
.\" * _ _ ____ _
|
|
.\" * Project ___| | | | _ \| |
|
|
.\" * / __| | | | |_) | |
|
|
.\" * | (__| |_| | _ <| |___
|
|
.\" * \___|\___/|_| \_\_____|
|
|
.\" *
|
|
.\" * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
.\" *
|
|
.\" * This software is licensed as described in the file COPYING, which
|
|
.\" * you should have received as part of this distribution. The terms
|
|
.\" * are also available at http://curl.haxx.se/docs/copyright.html.
|
|
.\" *
|
|
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
.\" * copies of the Software, and permit persons to whom the Software is
|
|
.\" * furnished to do so, under the terms of the COPYING file.
|
|
.\" *
|
|
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
.\" * KIND, either express or implied.
|
|
.\" *
|
|
.\" * $Id$
|
|
.\" **************************************************************************
|
|
.\"
|
|
.TH curl_easy_getinfo 3 "11 Feb 2009" "libcurl 7.19.4" "libcurl Manual"
|
|
.SH NAME
|
|
curl_easy_getinfo - extract information from a curl handle
|
|
.SH SYNOPSIS
|
|
.B #include <curl/curl.h>
|
|
|
|
.B "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );"
|
|
|
|
.SH DESCRIPTION
|
|
Request internal information from the curl session with this function. The
|
|
third argument \fBMUST\fP be a pointer to a long, a pointer to a char *, a
|
|
pointer to a struct curl_slist * or a pointer to a double (as this
|
|
documentation describes further down). The data pointed-to will be filled in
|
|
accordingly and can be relied upon only if the function returns CURLE_OK. Use
|
|
this function AFTER a performed transfer if you want to get transfer- oriented
|
|
data.
|
|
|
|
You should not free the memory returned by this function unless it is
|
|
explicitly mentioned below.
|
|
.SH AVAILABLE INFORMATION
|
|
The following information can be extracted:
|
|
.IP CURLINFO_EFFECTIVE_URL
|
|
Pass a pointer to a char pointer to receive the last used effective URL.
|
|
.IP CURLINFO_RESPONSE_CODE
|
|
Pass a pointer to a long to receive the last received HTTP or FTP code. This
|
|
option was known as CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. This
|
|
will be zero if no server response code has been received. Note that a proxy's
|
|
CONNECT response should be read with \fICURLINFO_HTTP_CONNECTCODE\fP and not
|
|
this.
|
|
.IP CURLINFO_HTTP_CONNECTCODE
|
|
Pass a pointer to a long to receive the last received proxy response code to a
|
|
CONNECT request.
|
|
.IP CURLINFO_FILETIME
|
|
Pass a pointer to a long to receive the remote time of the retrieved document
|
|
(in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If you get
|
|
-1, it can be because of many reasons (unknown, the server hides it or the
|
|
server doesn't support the command that tells document time etc) and the time
|
|
of the document is unknown. Note that you must tell the server to collect this
|
|
information before the transfer is made, by using the CURLOPT_FILETIME option
|
|
to \fIcurl_easy_setopt(3)\fP or you will unconditionally get a -1 back. (Added
|
|
in 7.5)
|
|
.IP CURLINFO_TOTAL_TIME
|
|
Pass a pointer to a double to receive the total time in seconds for the
|
|
previous transfer, including name resolving, TCP connect etc.
|
|
.IP CURLINFO_NAMELOOKUP_TIME
|
|
Pass a pointer to a double to receive the time, in seconds, it took from the
|
|
start until the name resolving was completed.
|
|
.IP CURLINFO_CONNECT_TIME
|
|
Pass a pointer to a double to receive the time, in seconds, it took from the
|
|
start until the connect to the remote host (or proxy) was completed.
|
|
.IP CURLINFO_APPCONNECT_TIME
|
|
Pass a pointer to a double to receive the time, in seconds, it took from the
|
|
start until the SSL/SSH connect/handshake to the remote host was completed.
|
|
This time is most often very near to the PRETRANSFER time, except for cases
|
|
such as HTTP pippelining where the pretransfer time can be delayed due to
|
|
waits in line for the pipeline and more. (Added in 7.19.0)
|
|
.IP CURLINFO_PRETRANSFER_TIME
|
|
Pass a pointer to a double to receive the time, in seconds, 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.
|
|
.IP CURLINFO_STARTTRANSFER_TIME
|
|
Pass a pointer to a double to receive the time, in seconds, it took from the
|
|
start until the first byte is just about to be transferred. This includes
|
|
CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate
|
|
the result.
|
|
.IP CURLINFO_REDIRECT_TIME
|
|
Pass a pointer to a double to receive the total time, in seconds, it took for
|
|
all redirection steps include name lookup, connect, pretransfer and transfer
|
|
before final transaction was started. CURLINFO_REDIRECT_TIME contains the
|
|
complete execution time for multiple redirections. (Added in 7.9.7)
|
|
.IP CURLINFO_REDIRECT_COUNT
|
|
Pass a pointer to a long to receive the total number of redirections that were
|
|
actually followed. (Added in 7.9.7)
|
|
.IP CURLINFO_REDIRECT_URL
|
|
Pass a pointer to a char pointer to receive the URL a redirect \fIwould\fP
|
|
take you to if you would enable CURLOPT_FOLLOWLOCATION. This can come very
|
|
handy if you think using the built-in libcurl redirect logic isn't good enough
|
|
for you but you would still prefer to avoid implementing all the magic of
|
|
figuring out the new URL. (Added in 7.18.2)
|
|
.IP CURLINFO_SIZE_UPLOAD
|
|
Pass a pointer to a double to receive the total amount of bytes that were
|
|
uploaded.
|
|
.IP CURLINFO_SIZE_DOWNLOAD
|
|
Pass a pointer to a double to receive the total amount of bytes that were
|
|
downloaded. The amount is only for the latest transfer and will be reset again
|
|
for each new transfer.
|
|
.IP CURLINFO_SPEED_DOWNLOAD
|
|
Pass a pointer to a double to receive the average download speed that curl
|
|
measured for the complete download. Measured in bytes/second.
|
|
.IP CURLINFO_SPEED_UPLOAD
|
|
Pass a pointer to a double to receive the average upload speed that curl
|
|
measured for the complete upload. Measured in bytes/second.
|
|
.IP CURLINFO_HEADER_SIZE
|
|
Pass a pointer to a long to receive the total size of all the headers
|
|
received. Measured in number of bytes.
|
|
.IP CURLINFO_REQUEST_SIZE
|
|
Pass a pointer to a long to receive the total size of the issued
|
|
requests. This is so far only for HTTP requests. Note that this may be more
|
|
than one request if FOLLOWLOCATION is true.
|
|
.IP CURLINFO_SSL_VERIFYRESULT
|
|
Pass a pointer to a long to receive the result of the certification
|
|
verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to
|
|
\fIcurl_easy_setopt(3)\fP).
|
|
.IP CURLINFO_SSL_ENGINES
|
|
Pass the address of a 'struct curl_slist *' to receive a linked-list of
|
|
OpenSSL crypto-engines supported. Note that engines are normally implemented
|
|
in separate dynamic libraries. Hence not all the returned engines may be
|
|
available at run-time. \fBNOTE:\fP you must call \fIcurl_slist_free_all(3)\fP
|
|
on the list pointer once you're done with it, as libcurl will not free the
|
|
data for you. (Added in 7.12.3)
|
|
.IP CURLINFO_CONTENT_LENGTH_DOWNLOAD
|
|
Pass a pointer to a double to receive the content-length of the download. This
|
|
is the value read from the Content-Length: field. Since 7.19.4, this returns -1
|
|
if the size isn't known.
|
|
.IP CURLINFO_CONTENT_LENGTH_UPLOAD
|
|
Pass a pointer to a double to receive the specified size of the upload. Since
|
|
7.19.4, this returns -1 if the size isn't known.
|
|
.IP CURLINFO_CONTENT_TYPE
|
|
Pass a pointer to a char pointer to receive the content-type of the downloaded
|
|
object. This is the value read from the Content-Type: field. If you get NULL,
|
|
it means that the server didn't send a valid Content-Type header or that the
|
|
protocol used doesn't support this.
|
|
.IP CURLINFO_PRIVATE
|
|
Pass a pointer to a char pointer to receive the pointer to the private data
|
|
associated with the curl handle (set with the CURLOPT_PRIVATE option to
|
|
\fIcurl_easy_setopt(3)\fP). Please note that for internal reasons, the
|
|
value is returned as a char pointer, although effectively being a 'void *'.
|
|
(Added in 7.10.3)
|
|
.IP CURLINFO_HTTPAUTH_AVAIL
|
|
Pass a pointer to a long to receive a bitmask indicating the authentication
|
|
method(s) available. The meaning of the bits is explained in the
|
|
CURLOPT_HTTPAUTH option for \fIcurl_easy_setopt(3)\fP. (Added in 7.10.8)
|
|
.IP CURLINFO_PROXYAUTH_AVAIL
|
|
Pass a pointer to a long to receive a bitmask indicating the authentication
|
|
method(s) available for your proxy authentication. (Added in 7.10.8)
|
|
.IP CURLINFO_OS_ERRNO
|
|
Pass a pointer to a long to receive the errno variable from a connect failure.
|
|
Note that the value is only set on failure, it is not reset upon a
|
|
successfull operation. (Added in 7.12.2)
|
|
.IP CURLINFO_NUM_CONNECTS
|
|
Pass a pointer to a long to receive how many new connections libcurl had to
|
|
create to achieve the previous transfer (only the successful connects are
|
|
counted). Combined with \fICURLINFO_REDIRECT_COUNT\fP you are able to know
|
|
how many times libcurl successfully reused existing connection(s) or not. See
|
|
the Connection Options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries
|
|
to make persistent connections to save time. (Added in 7.12.3)
|
|
.IP CURLINFO_PRIMARY_IP
|
|
Pass a pointer to a char pointer to receive the pointer to a zero-terminated
|
|
string holding the IP address of the most recent connection done with this
|
|
\fBcurl\fP handle. This string may be IPv6 if that's enabled. Note that you
|
|
get a pointer to a memory area that will be re-used at next request so you
|
|
need to copy the string if you want to keep the information. (Added in 7.19.0)
|
|
.IP CURLINFO_COOKIELIST
|
|
Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all
|
|
cookies cURL knows (expired ones, too). Don't forget to
|
|
\fIcurl_slist_free_all(3)\fP the list after it has been used. If there are no
|
|
cookies (cookies for the handle have not been enabled or simply none have been
|
|
received) 'struct curl_slist *' will be set to point to NULL. (Added in
|
|
7.14.1)
|
|
.IP CURLINFO_LASTSOCKET
|
|
Pass a pointer to a long to receive the last socket used by this curl
|
|
session. If the socket is no longer valid, -1 is returned. When you finish
|
|
working with the socket, you must call curl_easy_cleanup() as usual and let
|
|
libcurl close the socket and cleanup other resources associated with the
|
|
handle. This is typically used in combination with \fICURLOPT_CONNECT_ONLY\fP.
|
|
(Added in 7.15.2)
|
|
.IP CURLINFO_FTP_ENTRY_PATH
|
|
Pass a pointer to a char pointer to receive a pointer to a string holding the
|
|
path of the entry path. That is the initial path libcurl ended up in when
|
|
logging on to the remote FTP server. This stores a NULL as pointer if
|
|
something is wrong. (Added in 7.15.4)
|
|
.IP CURLINFO_CERTINFO
|
|
Pass a pointer to a 'struct curl_certinfo *' and you'll get it set to point to
|
|
struct that holds a number of linked lists with info about the certificate
|
|
chain, assuming you had CURLOPT_CERTINFO enabled when the previous request was
|
|
done. The struct reports how many certs it found and then you can extract info
|
|
for each of those certs by following the linked lists. The info chain is
|
|
provided in a series of data in the format "name:content" where the content is
|
|
for the specific named data. See also the certinfo.c example. NOTE: this
|
|
option is only available in libcurl built with OpenSSL support. (Added in
|
|
7.19.1)
|
|
.IP CURLINFO_CONDITION_UNMET
|
|
Pass a pointer to a long to receive the number 1 if the condition provided in
|
|
the previous request didn't match (see \fICURLOPT_TIMECONDITION\fP). Alas, if
|
|
this returns a 1 you know that the reason you didn't get data in return is
|
|
because it didn't fulfill the condition. The long ths argument points to will
|
|
get a zero stored if the condition instead was met. (Added in 7.19.4)
|
|
.SH TIMES
|
|
.nf
|
|
An overview of the six time values available from curl_easy_getinfo()
|
|
|
|
curl_easy_perform()
|
|
|
|
|
|--NAMELOOKUP
|
|
|--|--CONNECT
|
|
|--|--|--APPCONNECT
|
|
|--|--|--|--PRETRANSFER
|
|
|--|--|--|--|--STARTTRANSFER
|
|
|--|--|--|--|--|--TOTAL
|
|
|--|--|--|--|--|--REDIRECT
|
|
.fi
|
|
.IP NAMELOOKUP
|
|
\fICURLINFO_NAMELOOKUP_TIME\fP. The time it took from the start until the name
|
|
resolving was completed.
|
|
.IP CONNECT
|
|
\fICURLINFO_CONNECT_TIME\fP. The time it took from the start until the connect
|
|
to the remote host (or proxy) was completed.
|
|
.IP APPCONNECT
|
|
\fICURLINFO_APPCONNECT_TIME\fP. The time it took from the start until the SSL
|
|
connect/handshake with the remote host was completed. (Added in in 7.19.0)
|
|
.IP PRETRANSFER
|
|
\fICURLINFO_PRETRANSFER_TIME\fP. 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.
|
|
.IP STARTTRANSFER
|
|
\fICURLINFO_STARTTRANSFER_TIME\fP. The time it took from the start until the
|
|
first byte is just about to be transferred.
|
|
.IP TOTAL
|
|
\fICURLINFO_TOTAL_TIME\fP. Total time of the previous request.
|
|
.IP REDIRECT
|
|
\fICURLINFO_REDIRECT_TIME\fP. 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.
|
|
.SH RETURN VALUE
|
|
If the operation was successful, CURLE_OK is returned. Otherwise an
|
|
appropriate error code will be returned.
|
|
.SH "SEE ALSO"
|
|
.BR curl_easy_setopt "(3)"
|