diff --git a/sources/tech/20220302 How to use httpx, a web client for Python.md b/sources/tech/20220302 How to use httpx, a web client for Python.md new file mode 100644 index 0000000000..eed4c34702 --- /dev/null +++ b/sources/tech/20220302 How to use httpx, a web client for Python.md @@ -0,0 +1,179 @@ +[#]: subject: "How to use httpx, a web client for Python" +[#]: via: "https://opensource.com/article/22/3/python-httpx" +[#]: author: "Moshe Zadka https://opensource.com/users/moshez" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +How to use httpx, a web client for Python +====== +The httpx package for Python is an excellent and flexible module for +interacting with HTTP. +![Digital creative of a browser on the internet][1] + +The `httpx` package for Python is a sophisticated web client. Once you install it, you can use it to get data from websites. As usual, the easiest way to install it is with the `pip` utility: + + +``` +`$ python -m pip install httpx --user` +``` + +To use it, import it into a Python script, and then use the `.get` function to fetch data from a web address: + + +``` + + +import httpx +result = httpx.get("") +result.json()["args"] + +``` + +Here's the output from that simple script: + + +``` +`    {'hello': 'world'}` +``` + +### HTTP response + +By default, `httpx` will not raise errors on a non-200 status.  + +Try this code: + + +``` + + +result = httpx.get("") +result + +``` + +The result: + + +``` +`    ` +``` + +It's possible to raise a response explicitly. Add this exception handler: + + +``` + + +try: +    result.raise_for_status() +except Exception as exc: +    print("woops", exc) + +``` + +Here's the result: + + +``` + + +    woops Client error '404 NOT FOUND' for url '' +    For more information check: + +``` + +### Custom client + +It is worthwhile to use a custom client for anything but the simplest script. Aside from nice performance improvements, such as connection pooling, this is a good place to configure the client. + +For example, you can set a custom base URL: + + +``` + + +client = httpx.Client(base_url="") +result = client.get("/get?source=custom-client") +result.json()["args"] + +``` + +Sample output: + + +``` +`    {'source': 'custom-client'}` +``` + +This is useful for a typical scenario where you use the client to talk to a specific server. For example, using both `base_url` and `auth`, you can build a nice abstraction for an authenticated client: + + +``` + + +client = httpx.Client( +    base_url="", +    auth=("good_person", "secret_password"), +) +result = client.get("/basic-auth/good_person/secret_password") +result.json() + +``` + +Output: + + +``` +`    {'authenticated': True, 'user': 'good_person'}` +``` + +One of the nicer things you can use this for is constructing the client at a top-level "main" function and then passing it around. This lets other functions use the client and lets them get unit-tested with a client connected to a local WSGI app. + + +``` + + +def get_user_name(client): +    result = client.get("/basic-auth/good_person/secret_password") +    return result.json()["user"] + +get_user_name(client) +    'good_person' + +def application(environ, start_response): +    start_response('200 OK', [('Content-Type', 'application/json')]) +    return [b'{"user": "pretty_good_person"}'] +fake_client = httpx.Client(app=application, base_url="") +get_user_name(fake_client) + +``` + +Output: + + +``` +`    'pretty_good_person'` +``` + +### Try httpx + +Visit [python-httpx.org][2] for more information, documentation, and tutorials. I've found it to be an excellent and flexible module for interacting with HTTP. Give it a try and see what it can do for you. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/22/3/python-httpx + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_web_internet_website.png?itok=g5B_Bw62 (Digital creative of a browser on the internet) +[2]: https://www.python-httpx.org/