{"id":14990018,"url":"https://github.com/bagder/libcurl-video-tutorials","last_synced_at":"2025-09-07T21:34:16.554Z","repository":{"id":40381297,"uuid":"224883648","full_name":"bagder/libcurl-video-tutorials","owner":"bagder","description":"Video tutorials for how to write internet clients using libcurl","archived":false,"fork":false,"pushed_at":"2022-05-11T20:24:42.000Z","size":54,"stargazers_count":37,"open_issues_count":4,"forks_count":6,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-19T10:22:22.204Z","etag":null,"topics":["client","documentation","http","internet-protocol","libcurl"],"latest_commit_sha":null,"homepage":"https://bagder.github.io/libcurl-video-tutorials/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bagder.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-29T15:59:41.000Z","updated_at":"2024-03-12T12:45:24.000Z","dependencies_parsed_at":"2022-08-09T18:51:25.173Z","dependency_job_id":null,"html_url":"https://github.com/bagder/libcurl-video-tutorials","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bagder/libcurl-video-tutorials","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bagder%2Flibcurl-video-tutorials","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bagder%2Flibcurl-video-tutorials/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bagder%2Flibcurl-video-tutorials/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bagder%2Flibcurl-video-tutorials/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bagder","download_url":"https://codeload.github.com/bagder/libcurl-video-tutorials/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bagder%2Flibcurl-video-tutorials/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274100754,"owners_count":25222443,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","documentation","http","internet-protocol","libcurl"],"created_at":"2024-09-24T14:19:20.558Z","updated_at":"2025-09-07T21:34:16.503Z","avatar_url":"https://github.com/bagder.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# libcurl video tutorials\n\nA video tutorials series on how to write Internet applications using libcurl\nwith [Daniel Stenberg](https://daniel.haxx.se/), founder and lead developer of\nthe curl project.\n\nEach episode has a title and focused purpose. The source code used and\ndiscussed in each episode is made available here as well as extra links and\nuseful materials.\n\nAll code is written using C. A reasonably modern libcurl version is assumed.\n\nEach episode is 10-15 minutes long, only occasionally longer.\n\n## Episodes\n\n1. [setup](setup/) [\u0026#9655;](https://youtu.be/DVR8N9ob_ZY) a makefile that builds our code (using Linux and gcc)\n\n2. [global](global/) [\u0026#9655;](https://youtu.be/X3bq2uf0OEU) init and cleanup\n\n1. [simplest](simplest/) [\u0026#9655;](https://youtu.be/Uha3JGPRIQs) possible HTTPS client code\n\n2. [receive data](receive-data/) [\u0026#9655;](https://youtu.be/nbTaHEocCuo) by using a write callback\n\n3. [verbose](verbose/) [\u0026#9655;](https://youtu.be/dSEd3i5X_gI) enable CURLOPT_VERBOSE to get more info\n\n3. [head](head/) do HTTP HEAD and something about HTTP methods\n\n3. [more protocols](more-protocols/) make the client download HTTP and FTP too (and limit protocols)\n\n2. certificate verification for HTTPS clients\n\n6. HTTP POST\n\n7. HTTP PUT - with read callback\n\n8. Modifying the HTTP request headers\n\n8. debug callback\n\n8. Retrieving the HTTP response code after a successful transfer\n\n8. multi-part formpost\n\n9. use cookies and login to a site with POST\n\n10. different HTTP versions\n\n11. parse URLs with libcurl\n\n12. [to-multi](to-multi/) - convert the [simplest/](simplest/) easy interface program to using the multi interface\n\n12. do two transfers in parallel with the multi API\n\n13. do many parallel transfers and add new ones before all the existing are done\n\n14. feed receive data into a content parser library\n\n15. write a multi-threaded application using libcurl in multiple threads\n\n16. use the share API to share data between multiple easy handles\n\n## Concept\n\nEach episode should be short and focused on the topic only.\n\nEpisodes will be named, not numbered, so that we can insert new ones in\nbetween older ones if we think that suits the narrative.\n\n## Request episodes!\n\nIf you have additional ideas or thoughts of more topics and angles to cover, please [file an issue](https://github.com/bagder/libcurl-video-tutorials/issues) and explain!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbagder%2Flibcurl-video-tutorials","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbagder%2Flibcurl-video-tutorials","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbagder%2Flibcurl-video-tutorials/lists"}