libcurl - small example snippets
A collection of smaller stand-alone applications using the libcurl API in different ways to show how to use it for different Internet transfer scenarios.
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.
Index of 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. |
| block_ip | Show how CURLOPT_OPENSOCKETFUNCTION can be used to block IP addresses. |
| 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-delete | Delete a single file from an FTP server. |
| 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 |
| hsts-preload | Preload domains to HSTS |
| htmltidy | Download a document and use libtidy to parse the HTML. |
| htmltitle (C++) | Get a webpage, 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 | 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 |
| log_failed_transfers | Save failed transfer verbose log to disk |
| 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 | 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 | Simple HTTP GET |
| simplepost | 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 |
| websocket-updown | 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.