HTTPX Tutorial - A next-generation HTTP client for Python

Sdílet
Vložit
  • čas přidán 27. 07. 2024
  • In this Python Tutorial we learn about HTTPX, a modern HTTP client for Python with async support.
    Resources:
    www.python-httpx.org/
    www.twilio.com/blog/asynchron...
    Get my Free NumPy Handbook:
    www.python-engineer.com/numpy...
    ✅ Write cleaner code with Sourcery, instant refactoring suggestions in VS Code & PyCharm: sourcery.ai/?... *
    ⭐ Join Our Discord : / discord
    📓 ML Notebooks available on Patreon:
    / patrickloeber
    If you enjoyed this video, please subscribe to the channel:
    ▶️ : / @patloeber
    ~~~~~~~~~~~~~~~ CONNECT ~~~~~~~~~~~~~~~
    🖥️ Website: www.python-engineer.com
    🐦 Twitter - / patloeber
    ✉️ Newsletter - www.python-engineer.com/newsl...
    📸 Instagram - / patloeber
    🦾 Discord: / discord
    ▶️ Subscribe: / @patloeber
    ~~~~~~~~~~~~~~ SUPPORT ME ~~~~~~~~~~~~~~
    🅿 Patreon - / patrickloeber
    #Python
    Timeline:
    00:00 Introduction
    00:47 Installation & Features
    02:25 Basic Usage
    03:55 Advanced Usage with Client
    05:27 Async API
    06:20 Web App Testing
    07:33 Speed Tests
    ----------------------------------------------------------------------------------------------------------
    * This is an affiliate link. By clicking on it you will not have any additional costs, instead you will support me and my project. Thank you so much for the support! 🙏

Komentáře • 118

  • @patloeber
    @patloeber  Před 2 lety +14

    What's your favorite HTTP library in Python?

  • @TimL_
    @TimL_ Před 2 lety +10

    This was brilliant, the more involved topic, the comparisons, discussing correct practices, everything! Keep it up!

  • @anthonyaouad4190
    @anthonyaouad4190 Před 2 lety +91

    Small nitpick, can you please use time.perf_counter() instead of time.time() since a lot of beginners watch your videos and it's the better function

    • @cobyiv
      @cobyiv Před 2 lety +2

      Why is it better?

    • @bongjunjang5683
      @bongjunjang5683 Před 2 lety +28

      @@cobyiv because perf_counter uses cpu clocks to measure the difference of two function calls, while time.time returns the system time, which is subject to changes by the operating system.

    • @bongjunjang5683
      @bongjunjang5683 Před 2 lety +14

      @@cobyiv the system time, also called as ‘real world time’, is always subject to changes because your operating system periodically tries to calibrate the clock with clock synchronization protocol. You should not use system time to measure the difference of two time points because the time measured latter can be smaller than the time measured earlier due to these changes.

    • @anthonyaouad4190
      @anthonyaouad4190 Před 2 lety +4

      @@cobyiv check out pep418 peps.python.org/pep-0418/#rationale time.perf_counter() has the highest resolution for time deltas and is the one that should be used.

    • @bytesizedfeed
      @bytesizedfeed Před 2 lety

      Could you instead use time.process_time()?

  • @ermalgashimramori
    @ermalgashimramori Před 2 lety +1

    Great content, looking forward for more.

  • @theeox
    @theeox Před 2 lety

    It's funny I recently ran into domaintools switching from requests to httpx and didn't know why. Thanks for the run down!

  • @magno5157
    @magno5157 Před 2 lety +1

    I love Python! ... the simplicity of Pythonic ethos reverberates through even 3rd party Python modules

  • @CppExpedition
    @CppExpedition Před rokem

    Thx Python Engineer for making High Quality Videos!

  • @uvle-ts8bi
    @uvle-ts8bi Před 2 lety +1

    Thankx for breaking it down.. great tutorial for beginners

  • @Strikeviolet
    @Strikeviolet Před 2 lety

    I used this in our project… best library for async and sync requests

  • @prateeksarangi9187
    @prateeksarangi9187 Před 2 lety

    Thanks mate !! Great one

  • @vishalmatam
    @vishalmatam Před 2 lety

    Brilliant video!!

  • @chizzlemo3094
    @chizzlemo3094 Před 2 lety

    GREAT CONTENT, THANK YOU!

  • @shaheerzaman620
    @shaheerzaman620 Před 2 lety

    Very helpful!

  • @JuanDuran85
    @JuanDuran85 Před 2 lety

    Excellent. Thanks.

  • @daynetran6697
    @daynetran6697 Před 2 lety

    This is a great video that came at the right time! I was working with an API for the past week and the part of the pipeline that took the longest was the APi request through the requests library.
    Now I'm going to implement this HTTTPX client and also try to work in the Async feature! Thank you! You're awesome!

  • @ChrisHalden007
    @ChrisHalden007 Před 2 lety

    Interesting. Thanks

  • @JoshBecigneul
    @JoshBecigneul Před 2 lety +2

    Any thoughts on whether additional code would be needed to handle a server's responses such as HTTP rate-limits?

  • @kosmonautofficial296
    @kosmonautofficial296 Před 2 lety +1

    Great video thanks! Now is this also able to handle well in a multiprocess async fashion? I am looking into aiomultuprocess and not sure if it would be better to run this over aiohttp.

  • @fredieeevlogs7077
    @fredieeevlogs7077 Před rokem

    wow thanks for the tip

  • @Zekei1234
    @Zekei1234 Před 2 lety +10

    I was trying to use this, but you can't pass context to event handlers. This means, for instance, that a response handler only knows the response, but it has no knowledge of what the request was. Handlers are only assigned at the client level (no per-request handlers). So to get different handling for each request, you need a new client. This breaks connection pooling. Ultimately, I went with aiohttp, as it allows passing context per request. Hopefully they add this feature to httpx.

  • @tusharsnn
    @tusharsnn Před 2 lety +1

    have you tried http2 for making request ? what was the performance difference between http 1.1 vs 2 ? I think requests does not support h2 but httpx does.

  • @Caedin8
    @Caedin8 Před 2 lety +2

    It would have been great if you verified that all the 150 Pokemon were successfully gathered after each time trial. We are just trusting that the outcome of the 0.57 second async gather is equivalent to the 7 second synchronous gathering of Pokemon details. I believe you, but I am skeptical and an extra 2 or 3 seconds in the video to print the contents of the lists after would have been appreciated! Thanks

  • @Diablerick
    @Diablerick Před 2 lety

    Nice.

  • @toosafelol
    @toosafelol Před 2 lety +2

    httpx is very good library. amazing asyncio support. at my job we have replaced all httprequests in our code base with this. we used aiohttp and requests in the past.

  • @michak.6325
    @michak.6325 Před 2 lety +8

    Are there benefits compared to aiohttp? Performance should be comparable, but I'm curious if there is more... probably on testing flask / fastAPI as already mentioned?

    • @ivan2885
      @ivan2885 Před 2 lety

      so i think, as a HTTP client the bast solution for now is httpx, because AIOHTTP provides httpserver and httpclient as well.

    • @Assxz
      @Assxz Před rokem +1

      aiohttp is faster than async httpx, but need more code to write and less intuitive (like requests library). and httpx supports http/2 which is faster

  • @motaseamyousef7668
    @motaseamyousef7668 Před 2 lety

    Hi, thanks for all useful info
    Could you please make video list for your shorts videos

  • @AiF0
    @AiF0 Před 2 lety +1

    Well what is the difference between it and the requests library?

  • @holthuizenoemoet591
    @holthuizenoemoet591 Před 2 lety

    I always wondered if something like this would work to build backend webframework with

  • @arthurdujardin2877
    @arthurdujardin2877 Před 2 lety

    What is the VS code theme used ? I really like it !

  • @markjones9180
    @markjones9180 Před 2 lety

    What theme do you use in VS code?

  • @techshareurdu3948
    @techshareurdu3948 Před 2 lety

    I am new to your channel

  • @Lucifer-xk9de
    @Lucifer-xk9de Před 2 lety

    nice demo, the requests does not support asyncio, so there is aiohttp can help. now, we have another library which much convenient than aiohttp. the httpx have the same style as requests..thanks !

  • @stevanmeandzija
    @stevanmeandzija Před rokem

    Do you know why memory leak is happening when using in fastapi on linux?

  • @bigdaddy5303
    @bigdaddy5303 Před 2 lety

    So they combined requests with aiohttp? Don't think I'm going to bother changing my code to just have a single import.

  • @JusticeNDOU
    @JusticeNDOU Před 2 lety +2

    try using timeit to time method execution, python time library is not meant to time method execution

  • @nicenaija9952
    @nicenaija9952 Před 2 lety

    How well does this intergrate with Django?

  • @commerceclassesbygoyalinst8373

    How Can i Use Place Method with Frames in Tkinter ?

  • @aminramazanifar9743
    @aminramazanifar9743 Před 2 lety

    Can you please give a lecture about 'with' ?

  • @pritamsarkar3371
    @pritamsarkar3371 Před 2 lety

    the last example sometimes is giving "RuntimeError: Event loop is closed" or "httpx.ConnectTimeout" but sometimes it is executing properly, I am using python 3.8. , windows 10,, can you please explain what is happening, and what is the solution?

    • @pritamsarkar3371
      @pritamsarkar3371 Před 2 lety +1

      got the solution , just need to increase the timeout param

  • @Medx111
    @Medx111 Před 2 lety

    Make a video about socket

  • @ch4sethe5un
    @ch4sethe5un Před 2 lety

    But can't you use requests in asyncio via to_thread?

  • @hicoop
    @hicoop Před 2 lety

    Looks cool but not enough features to switch from requests

  • @abdoemad3952
    @abdoemad3952 Před 2 lety

    can you build a desktop app.
    determining the area of any engineering shapes
    like rectangle ,..... .

  • @techshareurdu3948
    @techshareurdu3948 Před 2 lety

    Can you please make a video on Aws Cloud Front
    How can I Use This http module with
    Python

  • @yashdawani1909
    @yashdawani1909 Před 2 lety +2

    import httpx as requests. Boom no refactoring required

  • @ehsankabiri8912
    @ehsankabiri8912 Před rokem

    Hope some day, httpx supports (Async+Socks5 proxy)

  • @Pelmenosaurus
    @Pelmenosaurus Před 2 lety

    99% modern internet is adult content or advertisement. I remember the times when a page opened in a browser was tens of kilobytes in size, and not like modern monstrous pages in megabytes and tens of megabytes.

  • @vraymond2048
    @vraymond2048 Před 2 lety +1

    I'm pretty sure there is ways to archive similiar result with request module and threading.

    • @angeloj.willems4362
      @angeloj.willems4362 Před 2 lety

      That's the method I currently use. But this looks to be faster.

    • @lucianofeder5422
      @lucianofeder5422 Před 2 lety

      And using async you dont need more threads to just wait requests. You can take advantage of a single thread on those kinda of tasks.

  • @DenisRasulev
    @DenisRasulev Před 2 lety +1

    Speed comparison starts at 7:33 - czcams.com/video/qAh5dDODJ5k/video.html

  • @reinduhr
    @reinduhr Před 2 měsíci

    Nice explanation Patrick, but 'Pokémon' is plural. Not 'pokemons'

  • @int0matar
    @int0matar Před 2 lety

    Why does python use single-line quotes instead of double quotes when defining a string literal? Golang always uses doubles. What could be the reason for this choice?

    • @tolia5587
      @tolia5587 Před 2 lety +1

      You can use double or single-line quotes. For example print("text"more text"text") won't work, but print("text'more text'text") will work

    • @int0matar
      @int0matar Před 2 lety

      @@tolia5587 I didn't mean it, it's all clear. I'm talking about the fact that it would be more logical to always use double quotes.

    • @tolia5587
      @tolia5587 Před 2 lety

      @@int0matar Yeah, I agree with you

  • @muhamedqasim5390
    @muhamedqasim5390 Před 2 lety +1

    Which faster httpx or aiohttp

  • @lazyh0rse
    @lazyh0rse Před 2 lety

    Whats the point?
    If request is working perfectly then i dont see the need for more bloat and dependencies.

  • @maqarg
    @maqarg Před 10 měsíci

    🎯 Key Takeaways for quick navigation:
    00:00 📖 Introduction to HTTPX
    00:27 🚀 Getting Started with HTTPX
    01:37 📜 HTTPX Features
    02:58 🧪 Basic Functionality of HTTPX
    04:05 🔧 Advanced Usage with HTTPX Client
    05:27 ⚡ Asynchronous API in HTTPX
    06:24 🧪 Testing Web Applications with HTTPX
    07:33 🚀 Speed Comparisons
    10:58 🎉 Conclusion

  • @DecimasoN
    @DecimasoN Před 2 lety

    I'd still choose aiohttp over httpx for pure async code

  • @CodingByAmp
    @CodingByAmp Před 2 lety

    wow

  • @bayy4202
    @bayy4202 Před 2 lety

    i think requests + asyncio.to_thread way simple and clean kkkk

  • @Ihavetoreturnsomevideotapes

    Hi Patrick !
    Bateman

  • @JokeryEU
    @JokeryEU Před 2 lety

    its missing http/3

  • @MrEloska
    @MrEloska Před 2 lety +1

    In the last example there is no need for `asyncio.create_task`. You can do it just adding coroutines to list `tasks.append(get_pokemon(client, url))`.
    What's more - to make this code more "pythonic" you can do it like:
    `pokemons = await asyncio.gather(*[get_pokemon(client, f"{base_pokemon_url}/{i}") for i in range(1, 151)])` :D

    • @angeloj.willems4362
      @angeloj.willems4362 Před 2 lety

      True. I tried it without asyncio.ensure_future and it worked prefectly.

  • @blueapollo3982
    @blueapollo3982 Před 2 lety

    Is this better than uvicorn?

    • @vraymond2048
      @vraymond2048 Před 2 lety +1

      Uvicorn Gunicorn is for server side hosting. In contrast, Request and httpx module is client side to request result from server.

    • @TNeulaender
      @TNeulaender Před 2 lety +4

      It's even better than Excel

  • @hansdietrich1496
    @hansdietrich1496 Před 2 lety

    "There is no way to get async with requests" ... well there is, using greenlets and gevent.

  • @armandophilippe6203
    @armandophilippe6203 Před 2 lety

    threading with request would have beeen as fast...

  • @akzual50
    @akzual50 Před rokem

    New gen? You mean someone just made helper methods deal with this for you

  • @ordinarygg
    @ordinarygg Před 2 lety +1

    MEMORY LEAKS: httpx.Client and httpx.AsynClient is leaking memory when you are not passing custom ssl_context. So if you use it in production, be cautious behind tutorials in vacuum space != your real code.

  • @martinhotmann7868
    @martinhotmann7868 Před rokem

    Nice, but honestly for a language that itself does not perform well and therefore always was the perfect wrapper and easy to handle, this async function (the right way) looks way to complicated. They should have made it WAY more simple.

  • @philippelhaus
    @philippelhaus Před 2 lety

    No http/3…

  • @isox0019
    @isox0019 Před rokem

    This is useless without semaphores, you must divide the requests if you have many requests like over 1000

  • @jerrygeorge180
    @jerrygeorge180 Před 2 lety

    .

  • @Dan-vu3vt
    @Dan-vu3vt Před 2 lety

    You're comparing parallelism to synchronous code. This is not really a fair comparison.

  • @Quidoute
    @Quidoute Před 2 lety

    hell no why every new framework say "next generation framework" just stop saying just GO and do it or you RUST

  • @Jkauppa
    @Jkauppa Před 2 lety

    trash expansions upon trash

    • @Jkauppa
      @Jkauppa Před 2 lety

      you do thrash just for money sake, nothing useful, therefore trash

    • @Jkauppa
      @Jkauppa Před 2 lety

      trash bloats around everything