C# / .NET had System.Net.WebRequest since 1.1. It's similar in principle to Requests.
The new System.Net.Http.HttpClient in .NET 4.5 is closer to Requests and not entirely bad, if a little rigid.
- It's too low level for quick stuff
- It handles HTTP basic auth wrong
- It throws an exception, AN EXCEPTION, for any response that isn't 2xx
- Async is an ugly mess
- In love with streams
- Horribly inconsistent across framework profiles
- ServicePointManager.Expect100Continue
- Inconsistent header handling and restrictions
- Terrible cookie APISo's python's urllib2, the point of `request` is that as soon as you go even slightly beyond very basic GET and POST, it breaks down quickly in a horrible mess.
I'm still surprised every time I use it that they've not released a modern library for it in .Net.
And this one is a pet peeve, but I hate that verbose stateful OO idiom where you instantiate an object (with a factory) and then use setters to change properties, instead of setting it all in a single command. I don't know if other .NET HTTP libraries change that, though...