libcurl
The engine in the curl command-line tool is libcurl. libcurl is also theengine in thousands of tools, services and applications out there today,performing their Internet data transfers.
C API
libcurl is a library of functions that are provided with a C API, forapplications written in C. You can easily use it from C++ too, with only a fewconsiderations (seelibcurl for C++ programmers). For otherlanguages, there existbindings that work as intermediate layers betweenlibcurl the library and corresponding functions for the particular languageyou like.
Transfer oriented
We have designed libcurl to be transfer oriented usually without forcing usersto be protocol experts or in fact know much at all about networking or theprotocols involved. You setup a transfer with as many details and specificinformation as you can and want, and then you tell libcurl to perform thattransfer.
That said, networking and protocols are areas with lots of pitfalls andspecial cases so the more you know about these things, the more you are ableto understand about libcurl's options and ways of working. Not to mention,such knowledge is invaluable when you are debugging and need to understandwhat to do next when things do not go as you intended.
The most basic libcurl using application can be as small as just a couple oflines of code, but most applications do, of course, need more code than that.
Simple by default, more on demand
libcurl generally does the simple and basic transfer by default, and if youwant to add more advanced features, you add that by setting the correctoptions. For example, libcurl does not support HTTP cookies by default but itdoes once you tell it.
This makes libcurl's behaviors easier to guess and depend on, and also itmakes it easier to maintain old behavior and add new features. Onlyapplications that actually ask for and use the new features get that behavior.