libcurl - small example snippets
These files are intended as examples only. In the interest of simplicity and clarity, they might not include proper error handling and might produce compiler warnings on some platforms. Real-world applications should pay more attention to these issues.
Download allexamples.zip, it contains all the example sources listed here.
You can also see a list of all libcurl easy options and which example source codes that use them.
All examples are written in C, unless specifically mentioned.
The examples
10-at-a-time | Download many files in parallel, in the same thread. |
address-scope | HTTP GET to an IPv6 address with specific scope |
altsvc | HTTP with Alt-Svc support |
anyauthput | HTTP PUT upload with authentication using "any" method. libcurl picks the one the server supports/wants. |
cacertinmem | CA cert in memory with OpenSSL to get an HTTPS page. |
certinfo | Extract lots of TLS certificate info. |
chkspeed | Show transfer timing info after download completes. |
connect-to | Use CURLOPT_CONNECT_TO to connect to "wrong" hostname |
cookie_interface | Import and export cookies with COOKIELIST. |
crawler | Web crawler based on curl and libxml2 to stress-test curl with hundreds of concurrent connections to various servers. |
debug | Show how CURLOPT_DEBUGFUNCTION can be used. |
default-scheme | Change default scheme when none is provided in the URL |
ephiperfifo | multi socket API usage with epoll and timerfd |
evhiperfifo | multi socket interface together with libev |
externalsocket | Pass in a custom socket for libcurl to use. |
fileupload | Upload to a file:// URL |
ftp-wildcard | FTP wildcard pattern matching |
ftpget | Get a single file from an FTP server. |
ftpgetinfo | Checks a single file's size and mtime from an FTP server. |
ftpgetresp | Similar to ftpget.c but also stores the received response-lines in a separate file using our own callback! |
ftpsget | Get a single file from an FTPS server. |
ftpupload | Performs an FTP upload and renames the file just after a successful transfer. |
ftpuploadfrommem | FTP upload a file from memory |
ftpuploadresume | Upload to FTP, resuming failed transfers. Active mode. |
getinfo | Use getinfo to get content-type after completed transfer. |
getinmemory | Shows how the write callback function can be used to download data into a chunk of memory instead of storing it in a file. |
getredirect | Show how to extract Location: header and URL to redirect to. |
getreferrer | Show how to extract referrer header. |
ghiper | multi socket API usage together with glib2 |
headerapi | Extract headers post transfer with the header API |
hiperfifo | multi socket API usage with libevent 2 |
href_extractor | Uses the "Streaming HTML parser" to extract the href pieces in a streaming manner from a downloaded HTML. |
hsts-preload | Preload domains to HSTS |
htmltidy | Download a document and use libtidy to parse the HTML. |
htmltitle (C++) | Get a web page, extract the title with libxml. |
http-options | Issue an HTTP 'OPTIONS *' request |
http-post | simple HTTP POST using the easy interface |
http2-download | Multiplexed HTTP/2 downloads over a single connection |
http2-pushinmemory | HTTP/2 server push. Receive all data in memory. |
http2-serverpush | HTTP/2 server push |
http2-upload | Multiplexed HTTP/2 uploads over a single connection |
http3 | Very simple HTTP/3 GET |
http3-present | Checks if HTTP/3 support is present in libcurl. |
httpcustomheader | HTTP request with custom modified, removed and added headers |
httpput | HTTP PUT with easy interface and read callback |
httpput-postfields | HTTP PUT using CURLOPT_POSTFIELDS |
https | Simple HTTPS GET |
imap-append | Send email with IMAP |
imap-authzid | Retrieve emails from a shared IMAP mailbox |
imap-copy | Copy an email from one IMAP folder to another |
imap-create | Create a new IMAP folder |
imap-delete | Delete an IMAP folder |
imap-examine | Obtain information about an IMAP folder |
imap-fetch | Retrieve IMAP emails |
imap-list | List the folders within an IMAP mailbox |
imap-lsub | List the subscribed IMAP folders |
imap-multi | Get IMAP email with the multi interface |
imap-noop | Perform an IMAP noop |
imap-search | Search for new IMAP emails |
imap-ssl | IMAP with implicit SSL |
imap-store | Modify the properties of an email over IMAP |
imap-tls | IMAP using TLS |
interface | Use CURLOPT_INTERFACE to bind the outgoing socket to an interface |
ipv6 | HTTPS GET using IPv6 only |
keepalive | Use the TCP keep-alive options |
localport | Use CURLOPT_LOCALPORT to control local port number |
maxconnects | Set maximum number of persistent connections to 1. |
multi-app | A basic application source code using the multi interface doing two transfers in parallel. |
multi-debugcallback | multi interface and debug callback |
multi-double | multi interface code doing two parallel HTTP transfers |
multi-event | multi_socket API using libevent |
multi-formadd | using the multi interface to do a multipart formpost without blocking |
multi-legacy | A basic application source code using the multi interface doing two transfers in parallel without curl_multi_wait/poll. |
multi-post | using the multi interface to do a multipart formpost without blocking |
multi-single | using the multi interface to do a single download |
multi-uv | multi_socket API using libuv |
multithread | A multi-threaded program using pthreads to fetch several files at once |
netrc | Use credentials from .netrc |
parseurl | Basic URL API use. |
persistent | reusing handles to do HTTP persistent connections |
pop3-authzid | Retrieve emails from a shared POP3 mailbox |
pop3-dele | Delete POP3 emails |
pop3-list | List the contents of a POP3 mailbox |
pop3-multi | Get POP3 email using the multi interface |
pop3-noop | Perform a POP3 noop |
pop3-retr | Retrieve POP3 email |
pop3-ssl | Get POP3 email using implicit SSL |
pop3-stat | Obtain POP3 message statistics |
pop3-tls | POP3 using TLS |
pop3-top | POP3 example showing how to retrieve only the headers of an email |
pop3-uidl | List the contents of a POP3 mailbox by unique ID |
post-callback | Issue an HTTP POST and provide the data through the read callback. |
postinmemory | Make an HTTP POST with data from memory and receive response in memory. |
postit2 | HTTP Multipart formpost with file upload and two additional parts. |
postit2-formadd | HTTP Multipart formpost with file upload and two additional parts. |
progressfunc | Use the progress callbacks, old and/or new one depending on available libcurl version. |
protofeats | Outputs all protocols and features supported |
range | GET a range only of an HTTP resource |
resolve | Use CURLOPT_RESOLVE to feed custom IP addresses for given hostname + port number combinations. |
rtsp-options | Very simple RTSP request sending OPTIONS. |
sendrecv | Demonstrate curl_easy_send() and curl_easy_recv() usage. |
sepheaders | Simple HTTP GET that stores the headers in a separate file |
sessioninfo | Uses the CURLINFO_TLS_SESSION data. |
sftpget | Gets a file using an SFTP URL. |
sftpuploadresume | Upload to SFTP, resuming a previously aborted transfer. |
shared-connection-cache | Connection cache shared between easy handles with the share interface |
simple | Very simple HTTP GET |
simplepost | Very simple HTTP POST |
simplessl | Shows HTTPS usage with client certs and optional ssl engine use. |
smooth-gtk-thread | A multi threaded application that uses a progress bar to show status. It uses Gtk+ to make a smooth pulse. |
smtp-authzid | Send email on behalf of another user with SMTP |
smtp-expn | Expand an SMTP email mailing list |
smtp-mail | Send email with SMTP |
smtp-mime | Send SMTP mime emails |
smtp-multi | Send SMTP email with the multi interface |
smtp-ssl | Send SMTP email using implicit SSL |
smtp-tls | Send SMTP email using implicit TLS |
smtp-vrfy | Verify an SMTP email address |
sslbackend | Shows HTTPS usage with client certs and optional ssl engine use. |
synctime | Set your system time from a remote HTTP server's Date: header. |
threaded-ssl | Show the required mutex callback setups for GnuTLS and OpenSSL when using libcurl multi-threaded. |
unixsocket | Access HTTP server over unix domain socket |
url2file | Download a given URL into a local file named page.out. |
urlapi | Set working URL with CURLU *. |
usercertinmem | Use an in-memory user certificate and RSA key and retrieve an https page. |
websocket | WebSocket using CONNECT_ONLY |
websocket-cb | WebSocket download-only using write callback |
xmlstream | Stream-parse a document using the streaming Expat parser. |
You also find these examples in the distribution archive, in docs/examples.