requests VS urllib3

Compare requests vs urllib3 and see what are their differences.


Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more. (by urllib3)
Our great sponsors
  • - Optimize your datasets for ML
  • Scout APM - A developer's best friend. Try free for 14-days
  • Nanos - Run Linux Software Faster and Safer than Linux with Unikernels
requests urllib3
28 2
46,222 2,793
0.7% 1.3%
7.5 9.1
9 days ago 3 days ago
Python Python
Apache License 2.0 MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.


Posts with mentions or reviews of requests. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2021-09-29.
  • What are the differences between the urllib, urllib2, urllib3 and requests module?
    In Python, what are the differences between the urllib, urllib2, urllib3 and requests modules? Why are there three? They seem to do the same thing...
  • Where can I read quality Python code
    Keep in mind that there's a lot of clutter in Requests' repository. The entire module is actually just these files.
    Starting with an incredibly complex project like a machine learning platform probably isn't a good idea. Try finding something easier. Maybe something like requests.
  • Why is the PSF ignoring its own CoC? | 2021-09-02 adds back a logo that people find offensive because someone got it tattooed on their body? Doesn't the logo violate the Code of Conduct?
  • 3 Ways to Unit Test REST APIs in Python | 2021-07-22
    To retrieve the weather data, we'll use requests. We can create a function that receives a city name as parameter and returns a json. The json will contain the temperature, weather description, sunset, sunrise time and so on.
  • reader 2.0 released – a Python feed reader library | 2021-07-19
    want to change the way feeds are retrieved by using Requests?
  • How To Write Clean Code in Python | 2021-07-14
    Explore other well-written code bases. If you want some examples of well-written, clean, and Pythonic code, check out the Python requests library.
  • Everything to know about Requests v2.26.0 | 2021-07-13
    Requests v2.26.0 is a large release which changes and removes many features and dependencies that you should know about when upgrading.
  • Multiple payloads with one POST request?
    Are you talking about multipart/mixed or some other form of multipart type? If so, look here: the parameter to pass is very confusingly named files. But, it seems to be going in the direction you want.
  • What are some good real-world examples of exceptions in Python? (like what open source projects are a good example of exception usage?)
    Custom exceptions:


Posts with mentions or reviews of urllib3. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2021-03-07.
  • HTTP Calls in Python Without requests or Other External Dependencies | 2021-03-07
    urllib3 is the dependency for many other tools, including requests. By itself, urllib3 is quite usable. It may be all you need.
  • Weird architectures weren't supported to begin with | 2021-02-28
    Alright, let's do some digging...

    On 2013-03-21, urllib3 added an optional dependency to pyopenssl for SNI support on python2 -

    On 2013-12-29, pyopenssl switched from opentls to cryptography -

    On 2016-07-19, urllib3 started to depend on a new pyopenssl version that requires cryptography -

    On 2016-11-15, requests started to depend on a new urllib3 version that now indirectly requires cryptography -

    On 2018-01-30, portage started to enable the +rsync-verify USE flag by default, which relies on the gemato python library maintained by mgorny himself, and gemato depended on requests. So 5-6 levels of indirection at this point? I lost count.

    On 2020-01-01, python2 was sunset. A painful year to remember, and a painful migration to forget. And just when the year was about to end...

    On 2020-12-22, cryptography started to integrate rust in the build process, and all hell broke loose -

    Ultimately, I think mgorny only has himself to blame here, by injecting his own library into the critical path of gentoo, without carefully taking care of its direct and indirect dependencies. (But of course it is also fair game to blame it on the 2to3 migration)

    In comparison, few months before this, the librsvg package went through a similar change where it started to depend on rust, and it was swift and painless without much drama - and

What are some alternatives?

When comparing requests and urllib3 you can also consider the following projects:

httplib2 - Small, fast HTTP client library for Python. Features persistent connections, cache, and Google App Engine support. Originally written by Joe Gregorio, now supported by community.

grequests - Requests + Gevent = <3

treq - Python requests like API built on top of Twisted's HTTP client.

Uplink - A Declarative HTTP Client for Python

Tapioca-Wrapper - Python API client generator

requests-futures - Asynchronous Python HTTP Requests for Humans using Futures

txrequests - Asynchronous Python HTTP Requests for Humans using twisted

AnyAPI - AnyAPI is a library that helps you to write any API wrapper with ease and in pythonic way.

jasmin - Jasmin - Open source SMS gateway