httpx | 🦋 | Reactive Programming library

 by   encode Python Version: 1.0.0b0 License: BSD-3-Clause

kandi X-RAY | httpx Summary

kandi X-RAY | httpx Summary

httpx is a Python library typically used in Programming Style, Reactive Programming applications. httpx has no bugs, it has no vulnerabilities, it has build file available, it has a Permissive License and it has high support. You can install using 'pip install httpx' or download it from GitHub, PyPI.

HTTPX is a fully featured HTTP client library for Python 3. It includes an integrated command line client, has support for both HTTP/1.1 and HTTP/2, and provides both sync and async APIs.

            kandi-support Support

              httpx has a highly active ecosystem.
              It has 10631 star(s) with 702 fork(s). There are 112 watchers for this library.
              There were 3 major release(s) in the last 6 months.
              There are 23 open issues and 742 have been closed. On average issues are closed in 112 days. There are 12 open pull requests and 0 closed requests.
              It has a negative sentiment in the developer community.
              The latest version of httpx is 1.0.0b0

            kandi-Quality Quality

              httpx has 0 bugs and 0 code smells.

            kandi-Security Security

              httpx has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
              httpx code analysis shows 0 unresolved vulnerabilities.
              There are 0 security hotspots that need review.

            kandi-License License

              httpx is licensed under the BSD-3-Clause License. This license is Permissive.
              Permissive licenses have the least restrictions, and you can use them in most projects.

            kandi-Reuse Reuse

              httpx releases are available to install and integrate.
              Deployable package is available in PyPI.
              Build file is available. You can build the component from source.
              Installation instructions, examples and code snippets are available.
              httpx saves you 4308 person hours of effort in developing the same functionality from scratch.
              It has 11213 lines of code, 1050 functions and 62 files.
              It has high code complexity. Code complexity directly impacts maintainability of the code.

            Top functions reviewed by kandi - BETA

            kandi has reviewed httpx and discovered the below as its top functions. This is intended to give you an instant insight into httpx implemented functionality, and help decide if they suit your requirements.
            • Generator for streaming requests
            • Send a request to the client
            • Handle redirects
            • Return the transport for the given URL
            • Streams an HTTP request
            • Merge cookies
            • Build a request
            • Handle async request
            • Create an event
            • Send a POST request
            • The encoding of the document
            • Synchronize the auth flow
            • Performs an async authentication flow
            • Make a DELETE request
            • Make a HEAD request
            • Perform an OPTIONS request
            • Send an OPTIONS request
            • Get a logger
            • Send a DELETE request
            • Make a GET request
            • Make an OPTIONS request
            • Send HEAD request
            • Make a PUT request
            • Make a POST request
            • Trace the connection
            • Make a PATCH request
            Get all kandi verified functions for this library.

            httpx Key Features

            No Key Features are available at this moment for httpx.

            httpx Examples and Code Snippets

            Advanced Usage-Customizing authentication
            Pythondot img1Lines of Code : 106dot img1License : Permissive (BSD-3-Clause)
            copy iconCopy
            class MyCustomAuth(httpx.Auth):
                def __init__(self, token):
                    self.token = token
                def auth_flow(self, request):
                    # Send the request, with a custom `X-Authentication` header.
                    request.headers['X-Authentication'] = self.token  
            Advanced Usage-HTTP Proxying-Routing
            Pythondot img2Lines of Code : 42dot img2License : Permissive (BSD-3-Clause)
            copy iconCopy
            proxies = {
                "all://": "http://localhost:8030",
            proxies = {
                "http://": "http://localhost:8030",
                "https://": "http://localhost:8031",
            proxies = {
                "all://": "http://localhost:8030",
            proxies = {
            Environment Variables-HTTPX_LOG_LEVEL
            Pythondot img3Lines of Code : 41dot img3License : Permissive (BSD-3-Clause)
            copy iconCopy
            import httpx
            with httpx.Client() as client:
                r = client.get("")
            $ HTTPX_LOG_LEVEL=debug python
            DEBUG [2019-11-06 19:11:24] httpx._client - HTTP Request: GET "HTTP/1.1 301 Moved  
            how to persist sessions in httpx python
            Pythondot img4Lines of Code : 4dot img4License : Strong Copyleft (CC BY-SA 4.0)
            copy iconCopy
            with httpx.Client() as client:
                r = client.get('')
            Slow code when fetching data from Coinmarketcap api
            Pythondot img5Lines of Code : 31dot img5License : Strong Copyleft (CC BY-SA 4.0)
            copy iconCopy
            import asyncio
            import time
            import requests
            import httpx
            def test_sync():
                for _ in range(50):
            async def test_async():
                async with httpx.AsyncClient() as client:
                    tasks = [client.
            FastAPI runs api-calls in serial instead of parallel fashion
            Pythondot img6Lines of Code : 45dot img6License : Strong Copyleft (CC BY-SA 4.0)
            copy iconCopy
            def ping(request: Request):
                return "pong"
            import asyncio
            async def ping(request: Request):
            Fast API with pytest using AsyncClient gives 422 on post?
            Pythondot img7Lines of Code : 9dot img7License : Strong Copyleft (CC BY-SA 4.0)
            copy iconCopy
            device_create =
            response = await"/device", json=device_create.dict(by_alias=True))
            assert response.status_code == 200
            Alternative to asyncio.gather which I can keep adding coroutines to at runtime?
            Pythondot img8Lines of Code : 134dot img8License : Strong Copyleft (CC BY-SA 4.0)
            copy iconCopy
            import asyncio
            import traceback
            import httpx
            async def task_1(client: httpx.AsyncClient):
                resp = await client.get("")
                await asyncio.sleep(0.1)  # without this would be IP ban
            405 method not allowed when using 'put', but success with 'get', why?
            Pythondot img9Lines of Code : 48dot img9License : Strong Copyleft (CC BY-SA 4.0)
            copy iconCopy
            async def update_item(
            ~$ curl -i -X 'PUT' \                                                               '' \
              -H 'accept: application/json' \
            fastapi/uvicorn prevent ungzipping with httpx.AsyncClinet
            Pythondot img10Lines of Code : 14dot img10License : Strong Copyleft (CC BY-SA 4.0)
            copy iconCopy
            import httpx
            from fastapi import FastAPI, Request, Response
            app = FastAPI()
            async def root(request: Request):
                async with httpx.AsyncClient() as client:
                    req = client.build_request('GET', '

            Community Discussions


            ModuleNotFoundError: No module named 'airflow.providers.slack' Airflow 2.0 (MWAA)
            Asked 2022-Apr-10 at 04:33

            I am using Airflow 2.0 and have installed the slack module through requirements.txt in MWAA. I have installed all the below packages, but still, it says package not found



            Answered 2022-Apr-10 at 04:33

            By default, MWAA is constrained to using version 3.0.0 for the package apache-airflow-providers-slack. If you specify version 4.2.3 in requirements.txt, it will not be installed (error logs should be available in CloudWatch). You'll have to downgrade to version 3.0.0.

            apache-airflow-providers-slack (constraints.txt)


            Add constraints file to the top of requirements.txt to use version 4.2.3 of apache-airflow-providers-slack.

            Add the constraints file for your Apache Airflow v2 environment to the top of your requirements.txt file.



            how to persist sessions in httpx python
            Asked 2022-Apr-09 at 06:45

            We can easily create a persistent session using:



            Answered 2022-Apr-09 at 06:45


            Slow code when fetching data from Coinmarketcap api
            Asked 2022-Apr-03 at 09:47

            I have the below code that fetches data from Coinmarketcap api and sends me a telegram message when parameters are met. When I fetch 100 coins then the code works fine. But when I fetch 5000 coins the code is very slow. The schedule time with refresh api is not the time that I have code.

            Can someone see why the code is slow with fetching data from the api with 5000 coins?

            A good answer is insert httpx / asyncio in the code. (answer Pawel Rubin (thanks). Does someone know how i can insert asyncio into the code?



            Answered 2022-Apr-01 at 13:50

            The code is making requests sequentially for every element in parsed['data'].

            Consider running your code asynchronously with some HTTP client that supports asyncio, for example httpx, and use asyncio.gather to run your requests concurrently.

            Consider the following example which makes 50 GET requests to using requests and using httpx. Note that the async solution is significantly faster.



            FastAPI runs api-calls in serial instead of parallel fashion
            Asked 2022-Mar-30 at 21:36

            I have the following code:



            Answered 2022-Mar-30 at 21:36

            Q :
            " ... What's the problem? "

            A :
            The FastAPI documentation is explicit to say the framework uses in-process tasks ( as inherited from Starlette ).

            That, by itself, means, that all such task compete to receive ( from time to time ) the Python Interpreter GIL-lock - being efficiently a MUTEX-terrorising Global Interpreter Lock, which in effect re-[SERIAL]-ises any and all amounts of Python Interpreter in-process threads
            to work as one-and-only-one-WORKS-while-all-others-stay-waiting...

            On fine-grain scale, you see the result -- if spawning another handler for the second ( manually initiated from a second FireFox-tab ) arriving http-request actually takes longer than a sleep has taken, the result of GIL-lock interleaved ~ 100 [ms] time-quanta round-robin ( all-wait-one-can-work ~ 100 [ms] before each next round of GIL-lock release-acquire-roulette takes place ) Python Interpreter internal work does not show more details, you may use more details ( depending on O/S type or version ) from here to see more in-thread LoD, like this inside the async-decorated code being performed :



            Fast API with pytest using AsyncClient gives 422 on post?
            Asked 2022-Mar-16 at 14:10

            I'm trying to send a request to an api using pytest through httpx.AsynClient



            Answered 2022-Mar-16 at 14:10

            You're double encoding your content as JSON - you're both asking for it to be returned as a JSON string, and then telling your request method to encode it as JSON a second time. json= as an argument to the method on the client converts the given data to JSON - it does not expect already serialized JSON.

            You can see this in your request string because it starts with " and not with { as you'd expect:



            Alternative to asyncio.gather which I can keep adding coroutines to at runtime?
            Asked 2022-Mar-15 at 13:09

            I need to be able to keep adding coroutines to the asyncio loop at runtime. I tried using create_task() thinking that this would do what I want, but it still needs to be awaited.

            This is the code I had, not sure if there is a simple edit to make it work?



            Answered 2021-Dec-19 at 13:43

            I once created similar pattern when I was mixing trio and kivy, which was demonstration of running multiple coroutines asynchronously.

            It use a trio.MemoryChannel which is roughly equivalent to asyncio.Queue, I'll just refer it as queue here.

            Main idea is:

            1. Wrap each task with class, which has run function.
            2. Make class object's own async method to put object itself into queue when execution is done.
            3. Create a global task-spawning loop to wait for the object in queue and schedule execution/create task for the object.



            fastapi/uvicorn prevent ungzipping with httpx.AsyncClinet
            Asked 2022-Feb-22 at 16:58

            i work on reverse proxy based on fastapi. I want transparenty send data requested by AsyncClient. I have problem with gziped pages. Please can you help me, how to prevent default ungzipping of resp.content on this example?



            Answered 2022-Feb-21 at 15:58

            It is possible to extract undecoded data from httpx response only in case of streaming mode stream=True or In the example below, I collect the entire response using aiter_raw and return it from the path operation. Keep in mind that the entire response is loaded into memory, if you want to avoid this use fastapi StreamingResponse



            ModuleNotFoundError when running docker and poetry
            Asked 2022-Feb-18 at 17:05

            I am running into an error when trying to run my container where it is saying it can't find a module while trying to import. Specifically:

            ModuleNotFoundError: No module named 'sentry_sdk'

            The following is my DockerFile which is a multistage build, it seems to install all the packages according to the console output.



            Answered 2022-Feb-18 at 17:05

            OK I figured it out and now I feel dumb.

            The issue was indeed related to the venv, basically, uvicorn is installed on the base image but not in my pyproject.toml. So poetry didn't install it in the venv. When I started the app in the Dockerfile using CMD it couldn't find uvicorn in the venv so went to the base install and ran from there. When I added uvicorn to the venv it all worked fine.



            Python & HTTPX: How does httpx client's connection pooling work?
            Asked 2022-Feb-08 at 16:27

            Consider this function that makes a simple GET request to an API endpoint:



            Answered 2022-Feb-08 at 16:27

            Is there any advantage in doing it like this or is there a better way?

            No, there is no advantage using httpx.Client in the way you've shown. In fact the httpx. API, e.g. httpx.get, does exactly the same thing!

            The "pool" is a feature of the transport manager held by Client, which is HTTPTransport by default. The transport is created at Client initialisation time and stored as the instance property self._transport.

            Creating a new Client instance means a new HTTPTransport instance, and transport instances have their own TCP connection pool. By creating a new Client instance each time and using it only once, you get no benefit over using e.g. httpx.get directly.

            And that might be OK! Connection pooling is an optimisation over creating a new TCP connection for each request. Your application may not need that optimisation, it may be performant enough already for your needs.

            If you are making many requests to the same endpoint in a tight loop, iterating within the context of the loop may net you some throughput gains, e.g.



            AttributeError: 'str' object has no attribute 'request' - googletrans
            Asked 2022-Feb-08 at 11:40

            I am trying to use this google translate python library googletrans 3.0.0, which I installed from pypi.

            I used this code to start with:



            Answered 2022-Feb-08 at 11:40

            This seems to be very confusing according to the official docs, but this github issue has a solution.

            For some reason the docs specify both strings and HTTPTransports but this has been clarified in the issue above.



            Community Discussions, Code Snippets contain sources that include Stack Exchange Network


            No vulnerabilities reported

            Install httpx

            Or, to include the optional HTTP/2 support, use:. HTTPX requires Python 3.6+.


            Project documentation is available at For a run-through of all the basics, head over to the QuickStart. For more advanced topics, see the Advanced Usage section, the async support section, or the HTTP/2 section. The Developer Interface provides a comprehensive API reference. To find out about tools that integrate with HTTPX, see Third Party Packages.
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries
          • PyPI

            pip install httpx

          • CLONE
          • HTTPS


          • CLI

            gh repo clone encode/httpx

          • sshUrl


          • Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link

            Consider Popular Reactive Programming Libraries


            by axios


            by ReactiveX


            by caolan


            by ReactiveX


            by github

            Try Top Libraries by encode


            by encodePython


            by encodePython


            by encodePython


            by encodePython


            by encodePython