CURLOPT_DEBUGFUNCTION(3)
CURLOPT_DEBUGFUNCTION(3curl_easy_setopt optionCURLOPT_DEBUGFUNCTION(3)
NAME
CURLOPT_DEBUGFUNCTION - debug callback
SYNOPSIS
#include <curl/curl.h>
typedef enum {
CURLINFO_TEXT = 0,
CURLINFO_HEADER_IN, /* 1 */
CURLINFO_HEADER_OUT, /* 2 */
CURLINFO_DATA_IN, /* 3 */
CURLINFO_DATA_OUT, /* 4 */
CURLINFO_SSL_DATA_IN, /* 5 */
CURLINFO_SSL_DATA_OUT, /* 6 */
CURLINFO_END
} curl_infotype;
int debug_callback(CURL *handle,
curl_infotype type,
char *data,
size_t size,
void *userptr);
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGFUNCTION,
debug_callback);
DESCRIPTION
Pass a pointer to your callback function, which should match
the prototype shown above.
CURLOPT_DEBUGFUNCTION(3) replaces the standard debug func-
tion used when CURLOPT_VERBOSE(3) is in effect. This call-
back receives debug information, as specified in the type
argument. This function must return 0. The data pointed to
by the char * passed to this function WILL NOT be zero ter-
minated, but will be exactly of the size as told by the size
argument.
The userptr argument is the pointer set with
CURLOPT_DEBUGDATA(3).
Available curl_infotype values:
CURLINFO_TEXT
The data is informational text.
CURLINFO_HEADER_IN
The data is header (or header-like) data received from
the peer.
CURLINFO_HEADER_OUT
The data is header (or header-like) data sent to the
libcurl 7.58.0 Last change: October 06, 2016 1
CURLOPT_DEBUGFUNCTION(3curl_easy_setopt optionCURLOPT_DEBUGFUNCTION(3)
peer.
CURLINFO_DATA_IN
The data is protocol data received from the peer.
CURLINFO_DATA_OUT
The data is protocol data sent to the peer.
CURLINFO_SSL_DATA_OUT
The data is SSL/TLS (binary) data sent to the peer.
CURLINFO_SSL_DATA_IN
The data is SSL/TLS (binary) data received from the
peer.
DEFAULT
NULL
PROTOCOLS
All
EXAMPLE
static
void dump(const char *text,
FILE *stream, unsigned char *ptr, size_t size)
{
size_t i;
size_t c;
unsigned int width=0x10;
fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\n",
text, (long)size, (long)size);
for(i=0; i<size; i+= width) {
fprintf(stream, "%4.4lx: ", (long)i);
/* show hex to the left */
for(c = 0; c < width; c++) {
if(i+c < size)
fprintf(stream, "%02x ", ptr[i+c]);
else
fputs(" ", stream);
}
/* show data on the right */
for(c = 0; (c < width) && (i+c < size); c++) {
char x = (ptr[i+c] >= 0x20 && ptr[i+c] < 0x80) ? ptr[i+c] : '.';
fputc(x, stream);
}
fputc('\n', stream); /* newline */
}
libcurl 7.58.0 Last change: October 06, 2016 2
CURLOPT_DEBUGFUNCTION(3curl_easy_setopt optionCURLOPT_DEBUGFUNCTION(3)
}
static
int my_trace(CURL *handle, curl_infotype type,
char *data, size_t size,
void *userp)
{
const char *text;
(void)handle; /* prevent compiler warning */
(void)userp;
switch (type) {
case CURLINFO_TEXT:
fprintf(stderr, "== Info: %s", data);
default: /* in case a new one is introduced to shock us */
return 0;
case CURLINFO_HEADER_OUT:
text = "=> Send header";
break;
case CURLINFO_DATA_OUT:
text = "=> Send data";
break;
case CURLINFO_SSL_DATA_OUT:
text = "=> Send SSL data";
break;
case CURLINFO_HEADER_IN:
text = "<= Recv header";
break;
case CURLINFO_DATA_IN:
text = "<= Recv data";
break;
case CURLINFO_SSL_DATA_IN:
text = "<= Recv SSL data";
break;
}
dump(text, stderr, (unsigned char *)data, size);
return 0;
}
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
/* the DEBUGFUNCTION has no effect until we enable VERBOSE */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
libcurl 7.58.0 Last change: October 06, 2016 3
CURLOPT_DEBUGFUNCTION(3curl_easy_setopt optionCURLOPT_DEBUGFUNCTION(3)
/* example.com is redirected, so we tell libcurl to follow redirection */
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
AVAILABILITY
Always
RETURN VALUE
Returns CURLE_OK
SEE ALSO
CURLOPT_VERBOSE(3), CURLOPT_DEBUGDATA(3),
libcurl 7.58.0 Last change: October 06, 2016 4
Man(1) output converted with
man2html