Video tutorials for how to write internet clients using libcurl

View on GitHub

libcurl video tutorials

A video tutorials series on how to write Internet applications using libcurl with Daniel Stenberg, founder and lead developer of the curl project.

Each episode has a title and focused purpose. The source code used and discussed in each episode is made available here as well as extra links and useful materials.

All code is written using C. A reasonably modern libcurl version is assumed.

Each episode is 10-15 minutes long, only occasionally longer.


  1. setup a makefile that builds our code (using Linux and gcc)

  2. global init and cleanup

  3. simplest possible HTTPS client code

  4. receive data by using a write callback

  5. verbose enable CURLOPT_VERBOSE to get more info

  6. head do HTTP HEAD and something about HTTP methods

  7. more protocols make the client download HTTP and FTP too (and limit protocols)

  8. certificate verification for HTTPS clients


  10. HTTP PUT - with read callback

  11. Modifying the HTTP request headers

  12. debug callback

  13. Retrieving the HTTP response code after a successful transfer

  14. multi-part formpost

  15. use cookies and login to a site with POST

  16. different HTTP versions

  17. parse URLs with libcurl

  18. to-multi - convert the simplest/ easy interface program to using the multi interface

  19. do two transfers in parallel with the multi API

  20. do many parallel transfers and add new ones before all the existing are done

  21. feed receive data into a content parser library

  22. write a multi-threaded application using libcurl in multiple threads

  23. use the share API to share data between multiple easy handles


Each episode should be short and focused on the topic only.

Episodes will be named, not numbered, so that we can insert new ones in between older ones if we think that suits the narrative.

Request episodes!

If you have additional ideas or thoughts of more topics and angles to cover, please file an issue and explain!