I replaced LWP::UserAgent with HTTP::Tiny! Why? The timeout implementation of LWP::UserAgent is evil. It's not possible to set a global timeout and eval + alarm does not work on Win32 systems.
HTTP::Tiny uses non-blocking and the timeout implementation works very well.
Yes, I know, HTTP::Tiny has no implementation for compression... but everyone should be able to write the 5 lines of code for IO::Uncompress::Gunzip. Maybe David implements compression in the future, but it's not important.
As you know, LWP::UserAgent is powerful and enough to use and Net::Curl is really fast. But HTTP::Tiny is powerful and light-weight. Even you can do everything for HTTP with it, there is no more dependency except core modules. Since it is light weight and has no dependency, so this is best for your tiny script or little module.
If you want deal HTTPS then you will need non-core modules like IO::Socket::SSL and Net::SSLeay. So don't forget installing them. :)
This module is what is called a HTTP/1.1 client. Of course, there are several modules of this sort out there, but the module is useful and handy for at least me.
It's worth noting that the author claims that it is more correct and more complete than HTTP::Lite.
In any case, I'd like to recommend the module for all!