On November 16 2023, I will do a multi-hour tutorial video on how to use libcurl. How to master it. As a follow-up to my previous video class called mastering the curl command line (at 13,000+ views right now).
This event will run as a live-stream webinar combination. You can opt to join via zoom or twitch. Zoom users can ask questions using voice, twitch viewers can do the same using the chat. For attending via Zoom you need to register, for twitch you can just show up.
It starts at 18:00 CET (09:00 PST, 17:00 UTC)
This session is part one of the planned two-part series. The amount of content is simply too much for me to deliver in a single sitting with intact quality. The second part will happen the following Monday, on November 20. Same time.
Both sessions will be recorded and will be made available for browsing after the fact.
At the time of me putting this blog post up the presentation and therefore agenda is not complete. I have also not yet figured out exactly how to do the split between the two episodes. Below you will find the planned topics that will be covered over the two episodes. Details will of course change in the final presentation.
The idea is that very little about developing with libcurl should be left out. This is the most thorough, most advanced, most in-depth libcurl video you ever saw. And it will be shock-full with source code examples. All examples that are shown in the video, are also provided stand-alone for easy browsing, copy and paste and later reading in a dedicated mastering libcurl GitHub repository.
Part one
The slides for part one.
Part two
The slides for part two.
Mastering libcurl
The project
- Reminders about the curl project
getting it
- installing
- building
- debugging
- free support
- paid support
API and ABI
- compatibility
- versions
- the API is for C
- header files
- compiling libcurl programs
- documentation
Architecture
- C89
- backends
- everything is non-blocking
API fundamentals
- content ignorant / URLs / callbacks
- basic by default
- global init
- easy handles
- easy options
- curl_easy_setopt
- curl_easy_perform
- curl_easy_cleanup
- write callback
- multi handle
- multi perform
- curl_multi_info_read
- curl_multi_cleanup
- a multi example
- caches
- curl_multi_socket_action
- curl_easy_getinfo
Puppeteering
- verbose
debug function
tracing - curl_version / curl_version_info
- persistent connections
- multiplexing
- Downloads
- Storing downloads
- Compression
- Multiple downloads
- Maximum file size
- Resuming and ranges
- Uploads
- Multiple uploads
- Transfer controls
- Stop slow transfers
- Rate limiting
- Connections
- Name resolve tricks
- Connection timeout
- Network interface
- Local port number
- Keep alive
- Timeouts
- Authentication
- .netrc
- return codes
- –libcurl
- post transfer meta-data
- caches
- some words on threads
- error handling with libcurl
Share API
- sharing data between easy handles
TLS
- enable TLS
- ciphers
- verifying server certificates
custom checks - client certificates
- on TLS backends
- SSLKEYLOGFILE
Proxies
- Proxy type
- HTTP proxy
- SOCKS proxy (tor)
- Authentication
- HTTPS proxy
- Proxy environment variables
- Proxy headers
HTTP
- Ranges
- HTTP versions
- Conditionals
- HTTP POST
data with callback - Multipart formpost
- Redirects
- Modify the HTTP request
- HTTP PUT
- Cookies
- Alternative Services
- HSTS
- HTTP/2
- HTTP/3
HTTP header API
- get specific header field after transfer
- iterate over many headers
URL API
- Parse a URL
- extract components
- update components
- URL encoding/decoding
- IDN encoding/decoding
- redirects
WebSocket
- just a quickie, I did a separate websocket video recently
https://youtu.be/NLIhd0wYO24