Repository guide · overview · v3
encode / httpx
“A next generation HTTP client for Python. 🦋” — as described by its authors
- Web and Applications
- Python
- BSD-3-Clause · open-source license
- Original repository
- encode/httpx
- Source platform
- GitHub
- Repository owner / organization
- encode
- License
- BSD-3-Clause · open-source license
- Analyzed revision
- b5addb64f0161ff6bfe94c124ef76f6a1fba5254
- Last verified
Source checked 2026-10-03: default branch still at the analyzed revision.
encode/httpx Repository Overview: Python HTTP Client
Terms used on this page
- Entrypoint record
- A file the analyzer marks as a place where execution can start. When it carries a __main__ guard excerpt, the file contains an if __name__ == "__main__": block and the excerpt shows what that block calls; without an excerpt, the file was flagged by its name only.
- Bounded static execution path
- A call chain reconstructed from the source code without running it, stopped after a fixed number of steps. It shows how far the code can be followed on paper, not what happens at run time.
- Unresolved boundary
- Where a static path stops because the next call goes into an external library or cannot be resolved without running the code. It marks the edge of this analysis, not a defect in the repository.
- Static relations
- Calls and imports found in the source. "External or unresolved" relations point outside the analyzed files.
- Module role
- The analyzer's label for a file, inferred from how many calls go in and out (for example core, entry/orchestration, leaf). It describes a position in the call graph, not the authors' design.
- Test-like files
- Files whose names or locations look like tests. This analysis counts them; it does not run them.
- Observed · inferred · author-claimed · unresolved
- How each statement is supported: read directly from the analyzed files; derived by the analyzer from them; stated by the repository's authors (metadata, README); or not established by this analysis.
- Verified
- Two uses on these pages. In an analyzer record ("verified provenance", "a verified entrypoint") it means the record was read directly from the analyzed files, which these guides call observed; for an entrypoint, the __main__ guard text is present. Since the analyzer fix of 2026-10-04, a file that only has an entrypoint-like name such as cli.py or main.py is recorded as inferred; guides analyzed before that still call such a file verified, and it is still only a guess about how the file is used. It does not mean the code was run or tested. "Last verified" is the date the guide last passed the lab's checks against the analysis record of the stated revision; it is not a review of the repository itself.
This repository contains the httpx Python package, described by its own metadata as an HTTP client for Python. Statically, it centers on Client and AsyncClient classes and Request/Response models, with no detected executable entrypoint. Recorded evidence includes 124 analyzed files, 40 test-like files, 14 pinned dependency records, and a BSD-3-Clause license.
What this repository is
Platform metadata describes this project as 'A next generation HTTP client for Python', with homepage https://www.python-httpx.org/. The primary language is Python, with 570031 recorded Python language bytes versus 2821 Shell bytes, and topics including asyncio, http, python, and trio. The latest recorded release is 0.28.1, published 2024-12-06, and 15477 stargazers were recorded at the metadata timestamp. Licensing is recorded as BSD-3-Clause, and LICENSE.md is a flagged project-level important file. Verified subsystem directories are docs, httpx, and tests. The analyzer reports 124 analyzed files in total.
How it starts
The analyzer detected no clear executable starting point; zero bounded execution paths were recorded, so runtime flow stays unresolved in this analysis. Statically, httpx/__init__.py is the most-connected module, with 885 incoming calls and 0 outgoing calls, fitting a leaf/data-boundary candidate role. By static call degree, the core sits in httpx/_client.py and httpx/_models.py, both service/core candidates. _client.py defines BaseClient, Client (lines 594-1304), and AsyncClient (1307-2019), while _models.py defines Headers, Request, Response, and Cookies. A workable mental model is that callers use Client or AsyncClient objects with Request and Response objects; this is an inference from symbol layout, not a traced path.
Repository structure
Recorded top-level file counts: docs 36, httpx 24, tests 40, scripts 9, .github 8, and 7 root-level files. The analyzer verified docs, httpx, and tests as subsystem directories. Within the httpx package, recorded static call degrees are: __init__.py 885 in/0 out; _exceptions.py 49 in/0 out; _models.py 33 in/66 out; _content.py 24 in/26 out; _client.py 12 in/51 out. The leaf-like modules (__init__.py, _exceptions.py) look like aggregation and error surfaces, while the two-way modules look like coordinators; these are analyzer role labels derived from static call degree and entrypoint membership, not runtime measurements. In total the analyzer recorded 4564 relations (4105 calls, 459 imports), of which 1503 resolved locally and 3061 stayed external or unresolved.
Dependencies and tests
Dependency evidence comes from 2 recorded manifest files; requirements.txt contributes 14 pinned records, including chardet==5.2.0, cryptography==45.0.7, trio==0.31.0, trustme==1.2.1, uvicorn==0.35.0, mkdocs==1.6.1, mkdocs-material==9.6.18, and mkautodoc==0.2.0. It also pins build==1.3.0, twine==6.1.0, mypy==1.17.1, pytest==8.4.1, ruff==0.12.11, and trio-typing==0.10.0. Every parsed record carries scope 'runtime', including the test and documentation tools. Two limits apply: the parser reads requirements-style manifests only and does not parse pyproject.toml dependency tables, and install/run/build inference is partial with installation commands unchecked. On tests: the analyzer counted 40 test files or test-like files. Recorded test modules include tests/client/test_auth.py, tests/client/test_client.py, tests/client/test_redirects.py, tests/models/test_responses.py, and tests/models/test_url.py, with named examples such as test_basic_auth, test_get, test_redirect_301, test_response_json, and test_url_params.
Suggested reading order
- Start with the four flagged important files: README.md, pyproject.toml, requirements.txt, and LICENSE.md; treat README-derived statements as author claims, since README extraction is line-based and can capture code lines.
- Open httpx/__init__.py; its recorded 885 incoming calls suggest it exposes the public surface.
- Continue to Client and AsyncClient in httpx/_client.py, then Request and Response in httpx/_models.py.
- Read the error names in httpx/_exceptions.py and the encoders encode_request and encode_response in httpx/_content.py.
- Close with test_get in tests/client/test_client.py as a compact usage example.
Limits of this analysis
- Relation coverage: 3061 of the 4564 recorded relations remained external or unresolved, so many references are not tied to local definitions.
- Dynamic mechanisms: reflection, runtime dependency injection, dynamic imports, monkey-patching, generated code, framework runtime wiring, and dynamic dispatch are not resolved, so any plugin-loading boundary cannot be established from this packet.
- Parsing bounds: files over 400 kB, minified bundles, and vendored directories are inventoried but not parsed, with relation extraction capped at 2500 per file and 150000 per repository.
- Entry: no clear entrypoint was detected by the analyzer's v0.10 heuristics.
- Runtime: no bounded execution path is available and install/run/build inference is partial, so runtime behavior stays unresolved.
Notable symbols
- Client (httpx/_client.py, lines 594-1304) and AsyncClient (1307-2019) are worth opening first, defined in the same file as BaseClient (188-591), ClientState (125-136), and BoundSyncStream/BoundAsyncStream (139-182).
- Request (382-512) and Response (515-1076) in httpx/_models.py, with Headers (139-379) and Cookies (1079-1277) nearby.
- The error family in httpx/_exceptions.py: HTTPError, RequestError, TransportError, TimeoutException, ConnectTimeout, ReadTimeout, WriteTimeout, PoolTimeout, NetworkError, ReadError, WriteError, and ConnectError.
- Stream classes (ByteStream, IteratorByteStream, AsyncIteratorByteStream, UnattachedStream) and encoders encode_request, encode_response, and encode_json in httpx/_content.py.
- ClientState and the Bound*Stream names suggest internal state and stream bookkeeping; this is a name-based reading, not established behavior.
What this analysis could not establish
The writing model's own notes on the analysis record. Identifiers such as lim_3, exec_* or claim_… name records of that analysis; the claims table cites the same records.
- No executable entrypoint and zero bounded execution paths were recorded, so runtime startup and flow are not established.
- 3061 static relations remained external or unresolved, so cross-module reference coverage is incomplete.
- readme.md was excluded from important files as a case-variant path not present in the analyzed file inventory.
- Dependency evidence covers only requirements-style manifests; pyproject.toml dependency tables were not parsed.
- All dependency records carry scope 'runtime', including test and documentation tools, which may reflect parser defaults rather than actual usage.
Claims and evidence — 39 claims, 39 supported by an independent verifier
Every statement above is a claim that cites grounding IDs from the analysis. IDs are internal to the analysis run; the columns show what each claim rests on and how strong that ground is.
Every substantive statement above is a claim bound to grounding IDs of the analyzed revision. Global grounding IDs are namespaced by the analysis run.
| Claim | Epistemic status | Verifier | Grounding (global IDs) |
|---|---|---|---|
| c1 Platform metadata describes the project as 'A next generation HTTP client for Python' and lists the homepage https://www.python-httpx.org/. | author_claimed | supported | analysis_8dada44e2683a68b:meta_description, analysis_8dada44e2683a68b:meta_homepage |
| c2 Platform metadata records Python as primary language with 570031 Python bytes and 2821 Shell bytes, and topics asyncio, http, python, trio. | observed | supported | analysis_8dada44e2683a68b:meta_primary_language, analysis_8dada44e2683a68b:meta_language_bytes, analysis_8dada44e2683a68b:meta_topics |
| c3 Metadata records release 0.28.1 published 2024-12-06 and 15477 stargazers at the recorded timestamp. | observed | supported | analysis_8dada44e2683a68b:meta_latest_release, analysis_8dada44e2683a68b:meta_stars |
| c4 The license is recorded as BSD-3-Clause, and LICENSE.md is a project-level important file. | observed | supported | analysis_8dada44e2683a68b:meta_license, analysis_8dada44e2683a68b:important_5 |
| c5 docs, httpx, and tests are verified top-level subsystem directories. | observed | supported | analysis_8dada44e2683a68b:subsys_1, analysis_8dada44e2683a68b:subsys_2, analysis_8dada44e2683a68b:subsys_3 |
| c6 The analyzer reports 124 analyzed files for this repository. | inferred | supported | analysis_8dada44e2683a68b:summary_repository |
| c7 No clear executable starting point was established by the static analyzer. | inferred | supported | analysis_8dada44e2683a68b:claim_157ea7056846 |
| c8 No bounded execution paths were available for architecture flow reconstruction, so runtime flow is unresolved here. | unresolved | supported | analysis_8dada44e2683a68b:claim_672e35a3ddd9 |
| c9 httpx/__init__.py is recorded with 885 incoming calls and 0 outgoing calls, as a leaf/data-boundary candidate. | inferred | supported | analysis_8dada44e2683a68b:role_1 |
| c10 httpx/_client.py defines BaseClient (lines 188-591), Client (594-1304), and AsyncClient (1307-2019). | observed | supported | analysis_8dada44e2683a68b:py_class_336b90564903, analysis_8dada44e2683a68b:py_class_3faf1c680d7f, analysis_8dada44e2683a68b:py_class_79eb95aadf0c |
| c11 httpx/_models.py defines Headers (139-379), Request (382-512), Response (515-1076), and Cookies (1079-1277). | observed | supported | analysis_8dada44e2683a68b:py_class_11948e37f28d, analysis_8dada44e2683a68b:py_class_8df841cf2f05, analysis_8dada44e2683a68b:py_class_4c238fa2e939, analysis_8dada44e2683a68b:py_class_5d7fc0e0c34d |
| c12 Static call-degree roles mark httpx/_client.py (12 incoming, 51 outgoing) and httpx/_models.py (33 incoming, 66 outgoing) as service/core candidates; a static reading is that callers use Client or AsyncClient with Request and Response objects, though no execution path was traced. | inferred | supported | analysis_8dada44e2683a68b:role_4, analysis_8dada44e2683a68b:role_10, analysis_8dada44e2683a68b:py_class_3faf1c680d7f, analysis_8dada44e2683a68b:py_class_79eb95aadf0c, analysis_8dada44e2683a68b:py_class_8df841cf2f05, analysis_8dada44e2683a68b:py_class_4c238fa2e939 |
| c13 Top-level directories hold: docs 36 files, httpx 24, tests 40, scripts 9, .github 8, and 7 root-level files. | inferred | supported | analysis_8dada44e2683a68b:summary_repository |
| c14 docs, httpx, and tests are verified subsystem directories. | observed | supported | analysis_8dada44e2683a68b:subsys_1, analysis_8dada44e2683a68b:subsys_2, analysis_8dada44e2683a68b:subsys_3 |
| c15 Recorded static call degrees: httpx/__init__.py 885 in/0 out; httpx/_exceptions.py 49 in/0 out; httpx/_models.py 33 in/66 out; httpx/_content.py 24 in/26 out; httpx/_client.py 12 in/51 out. | inferred | supported | analysis_8dada44e2683a68b:role_1, analysis_8dada44e2683a68b:role_8, analysis_8dada44e2683a68b:role_10, analysis_8dada44e2683a68b:role_6, analysis_8dada44e2683a68b:role_4 |
| c16 The analyzer's role labels - leaf/data-boundary candidate for __init__.py and _exceptions.py, service/core candidate for _models.py, _content.py, and _client.py - are inferences from static call degree and entrypoint membership, not runtime measurements. | inferred | supported | analysis_8dada44e2683a68b:role_1, analysis_8dada44e2683a68b:role_8, analysis_8dada44e2683a68b:role_10, analysis_8dada44e2683a68b:role_6, analysis_8dada44e2683a68b:role_4 |
| c17 The analyzer recorded 4564 static relations: 4105 calls and 459 imports; 1503 resolved locally and 3061 external or unresolved. | observed | supported | analysis_8dada44e2683a68b:relation_counts |
| c18 The analyzer counted 2 build/dependency manifest files; requirements.txt contributes 14 pinned records, including chardet==5.2.0, cryptography==45.0.7, trio==0.31.0, trustme==1.2.1, uvicorn==0.35.0, mkdocs==1.6.1, mkdocs-material==9.6.18, and mkautodoc==0.2.0. | observed | supported | analysis_8dada44e2683a68b:ev_manifest_1, analysis_8dada44e2683a68b:dep_1, analysis_8dada44e2683a68b:dep_7, analysis_8dada44e2683a68b:dep_11, analysis_8dada44e2683a68b:dep_13, analysis_8dada44e2683a68b:dep_14, analysis_8dada44e2683a68b:dep_2, analysis_8dada44e2683a68b:dep_4, analysis_8dada44e2683a68b:dep_3 |
| c19 The same manifest pins build==1.3.0, twine==6.1.0, mypy==1.17.1, pytest==8.4.1, ruff==0.12.11, and trio-typing==0.10.0. | observed | supported | analysis_8dada44e2683a68b:dep_5, analysis_8dada44e2683a68b:dep_6, analysis_8dada44e2683a68b:dep_8, analysis_8dada44e2683a68b:dep_9, analysis_8dada44e2683a68b:dep_10, analysis_8dada44e2683a68b:dep_12 |
| c20 Every dependency record carries scope 'runtime' as parsed, including test and documentation tools such as pytest and mkdocs. | observed | supported | analysis_8dada44e2683a68b:dep_9, analysis_8dada44e2683a68b:dep_2 |
| c21 Dependency coverage is partial: records come only from requirements-style manifests, and pyproject.toml dependency tables are not parsed. | observed | supported | analysis_8dada44e2683a68b:lim_3 |
| c22 Install, run, and build inference is partial, and installation commands remain unchecked. | observed | supported | analysis_8dada44e2683a68b:lim_2 |
| c23 The repository contains 40 test files or test-like files. | observed | supported | analysis_8dada44e2683a68b:ev_tests_1 |
| c24 Test modules with recorded static roles include tests/client/test_auth.py, tests/client/test_client.py, tests/client/test_redirects.py, tests/models/test_responses.py, and tests/models/test_url.py; named test symbols include test_basic_auth, test_get, test_redirect_301, test_response_json, and test_url_params. | inferred | supported | analysis_8dada44e2683a68b:role_20, analysis_8dada44e2683a68b:role_21, analysis_8dada44e2683a68b:role_28, analysis_8dada44e2683a68b:role_35, analysis_8dada44e2683a68b:role_36, analysis_8dada44e2683a68b:py_func_4033e69b8cf3, analysis_8dada44e2683a68b:py_func_78ca9c9a302f, analysis_8dada44e2683a68b:py_func_80f81b3e1eaf, analysis_8dada44e2683a68b:py_func_b092ff969606, analysis_8dada44e2683a68b:py_func_c81de70789bb |
| c25 README.md, pyproject.toml, requirements.txt, and LICENSE.md are project-level important files. | observed | supported | analysis_8dada44e2683a68b:important_1, analysis_8dada44e2683a68b:important_3, analysis_8dada44e2683a68b:important_4, analysis_8dada44e2683a68b:important_5 |
| c26 README claim extraction is line-based and may capture code lines instead of prose, so README-derived statements are author claims at most. | observed | supported | analysis_8dada44e2683a68b:lim_4 |
| c27 A grounded core-code order: open httpx/__init__.py (885 incoming calls suggests the public surface), then Client and AsyncClient in httpx/_client.py, then Request and Response in httpx/_models.py. | inferred | supported | analysis_8dada44e2683a68b:role_1, analysis_8dada44e2683a68b:py_class_3faf1c680d7f, analysis_8dada44e2683a68b:py_class_79eb95aadf0c, analysis_8dada44e2683a68b:py_class_8df841cf2f05, analysis_8dada44e2683a68b:py_class_4c238fa2e939 |
| c28 Next, read the error names recorded in httpx/_exceptions.py (HTTPError, RequestError, TransportError, TimeoutException, and network/timeout error classes) and the encoders encode_request and encode_response in httpx/_content.py. | observed | supported | analysis_8dada44e2683a68b:py_class_53397132bfcf, analysis_8dada44e2683a68b:py_class_9840fcb69389, analysis_8dada44e2683a68b:py_class_817ca15b8618, analysis_8dada44e2683a68b:py_class_c6c9d9349959, analysis_8dada44e2683a68b:py_class_7dc77e38ef72, analysis_8dada44e2683a68b:py_func_d17d0fd223d3, analysis_8dada44e2683a68b:py_func_a5366da2e72b |
| c29 Close with test_get (tests/client/test_client.py, lines 16-30) as a compact usage example. | observed | supported | analysis_8dada44e2683a68b:py_func_78ca9c9a302f |
| c30 Of 4564 recorded static relations, 3061 remained external or unresolved and 1503 resolved locally. | observed | supported | analysis_8dada44e2683a68b:relation_counts |
| c31 Reflection, runtime dependency injection, dynamic imports, monkey-patching, generated code, framework runtime wiring, and dynamic dispatch are not resolved by this static analysis. | observed | supported | analysis_8dada44e2683a68b:lim_1 |
| c32 Bounded analysis leaves files over 400 kB, minified bundles, and vendored directories inventoried but not parsed, with relation extraction capped at 2500 per file and 150000 per repository. | observed | supported | analysis_8dada44e2683a68b:lim_6 |
| c33 No clear entrypoint was detected by the analyzer's v0.10 heuristics. | unresolved | supported | analysis_8dada44e2683a68b:claim_5a56b461d8b0 |
| c34 No bounded static execution path is available and install/run/build inference is partial, so runtime behavior stays unresolved. | unresolved | supported | analysis_8dada44e2683a68b:claim_4d30ade3e21e, analysis_8dada44e2683a68b:lim_2 |
| c35 httpx/_client.py defines Client (lines 594-1304) and AsyncClient (1307-2019), in the same file as BaseClient (188-591), ClientState (125-136), and BoundSyncStream/BoundAsyncStream (139-182). | observed | supported | analysis_8dada44e2683a68b:py_class_3faf1c680d7f, analysis_8dada44e2683a68b:py_class_79eb95aadf0c, analysis_8dada44e2683a68b:py_class_336b90564903, analysis_8dada44e2683a68b:py_class_da201dd450ea, analysis_8dada44e2683a68b:py_class_476aa3335d7d, analysis_8dada44e2683a68b:py_class_5a0ffe0faa2d |
| c36 httpx/_models.py defines Headers (139-379), Request (382-512), Response (515-1076), and Cookies (1079-1277). | observed | supported | analysis_8dada44e2683a68b:py_class_11948e37f28d, analysis_8dada44e2683a68b:py_class_8df841cf2f05, analysis_8dada44e2683a68b:py_class_4c238fa2e939, analysis_8dada44e2683a68b:py_class_5d7fc0e0c34d |
| c37 httpx/_exceptions.py defines the classes HTTPError, RequestError, TransportError, TimeoutException, ConnectTimeout, ReadTimeout, WriteTimeout, PoolTimeout, NetworkError, ReadError, WriteError, and ConnectError. | observed | supported | analysis_8dada44e2683a68b:py_class_53397132bfcf, analysis_8dada44e2683a68b:py_class_9840fcb69389, analysis_8dada44e2683a68b:py_class_817ca15b8618, analysis_8dada44e2683a68b:py_class_c6c9d9349959, analysis_8dada44e2683a68b:py_class_96f9fdcba61a, analysis_8dada44e2683a68b:py_class_f3825bfd7342, analysis_8dada44e2683a68b:py_class_04c267313be0, analysis_8dada44e2683a68b:py_class_dedeb3b84dcf, analysis_8dada44e2683a68b:py_class_7dc77e38ef72, analysis_8dada44e2683a68b:py_class_5fc43e5d5fa0, analysis_8dada44e2683a68b:py_class_8d58def2f797, analysis_8dada44e2683a68b:py_class_25cc28f7df72 |
| c38 httpx/_content.py defines the stream classes ByteStream, IteratorByteStream, AsyncIteratorByteStream, and UnattachedStream, plus encoders including encode_request (186-218), encode_response (221-240), and encode_json (176-183). | observed | supported | analysis_8dada44e2683a68b:py_class_d33c1dc2d8ef, analysis_8dada44e2683a68b:py_class_4d93cc7e6f28, analysis_8dada44e2683a68b:py_class_370be0dc21c6, analysis_8dada44e2683a68b:py_class_2adf1d4167a2, analysis_8dada44e2683a68b:py_func_d17d0fd223d3, analysis_8dada44e2683a68b:py_func_a5366da2e72b, analysis_8dada44e2683a68b:py_func_66b4495972e5 |
| c39 Names such as ClientState and BoundSyncStream/BoundAsyncStream suggest internal client state and stream bookkeeping; this is a name-based interpretation, not established behavior. | inferred | supported | analysis_8dada44e2683a68b:py_class_da201dd450ea, analysis_8dada44e2683a68b:py_class_476aa3335d7d, analysis_8dada44e2683a68b:py_class_5a0ffe0faa2d |
Sources, rights and disclosure · attribution-license-templates/v0.1
Rights notice. Original repository hosted on GitHub. Repository source code, documentation, names, media, and related project materials remain subject to the rights of their respective authors, contributors, and other rights holders and to applicable repository license terms.
Platform notice. GitHub is the source hosting platform for the linked repository. GitHub and related marks are trademarks of GitHub, Inc. EVEMISS Technology is not affiliated with or endorsed by GitHub unless explicitly stated otherwise.
How this page is produced. This page was produced using revision-aware repository analysis and AI-assisted editorial tooling. Technical claims are tied to the analyzed repository revision and may be revalidated when the source repository changes.
AI-assisted analysis. Reviewed by EVEMISS Technology through human–AI collaborative review. · Report a rights concern · All repository guides