eggfetch 0.2.1__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {eggfetch-0.2.1 → eggfetch-0.3.0}/Cargo.lock +48 -43
- eggfetch-0.3.0/PKG-INFO +154 -0
- eggfetch-0.3.0/README.md +125 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/Cargo.toml +12 -4
- eggfetch-0.3.0/crates/eggfetch-core/README.md +125 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/auth.rs +6 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/body.rs +28 -13
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/client/routes.rs +119 -113
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/client.rs +69 -9
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/compression.rs +72 -17
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/cookie.rs +50 -11
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/error.rs +474 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/headers.rs +4 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/http_origin.rs +123 -4
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/http_version.rs +134 -10
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/lib.rs +6 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/multipart.rs +9 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/network_stream.rs +9 -3
- eggfetch-0.3.0/crates/eggfetch-core/src/pipeline/custom_dialing.rs +225 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/pipeline/finalize.rs +4 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/pipeline/h3_dispatch.rs +8 -3
- eggfetch-0.3.0/crates/eggfetch-core/src/pipeline/hop.rs +563 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/pipeline/hyper_dispatch.rs +47 -13
- eggfetch-0.3.0/crates/eggfetch-core/src/pipeline/lean.rs +94 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/pipeline/mod.rs +148 -60
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/pipeline/prepare.rs +57 -61
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/pipeline/proxy_dispatch.rs +12 -5
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/pipeline/redirect.rs +125 -268
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/pipeline/retry.rs +64 -9
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/pipeline/route.rs +6 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/pool.rs +329 -117
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/proxy.rs +17 -14
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/redact.rs +34 -6
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/redirect.rs +8 -3
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/request.rs +11 -28
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/response.rs +33 -9
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/retry.rs +68 -8
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/stream/body_timeout.rs +2 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/stream/write_timeout.rs +4 -2
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/timeout.rs +70 -12
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/tls.rs +12 -6
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/connect.rs +108 -29
- eggfetch-0.3.0/crates/eggfetch-core/src/transport/datagram.rs +923 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/direct.rs +103 -18
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/direct_connector.rs +6 -5
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/http3.rs +389 -47
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/hyper_client.rs +24 -47
- eggfetch-0.3.0/crates/eggfetch-core/src/transport/mod.rs +274 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/proxy.rs +99 -43
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/socks.rs +22 -8
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/uds.rs +19 -9
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport_hints.rs +47 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/adverse_tests.rs +5 -1
- eggfetch-0.3.0/crates/eggfetch-core/tests/consolidation_evidence_tests.rs +392 -0
- eggfetch-0.3.0/crates/eggfetch-core/tests/cookie_policy_parity_tests.rs +541 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/custom_dialer_tests.rs +4 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/direct_transport_tests.rs +17 -1
- eggfetch-0.3.0/crates/eggfetch-core/tests/h3_datagram_route.rs +1078 -0
- eggfetch-0.3.0/crates/eggfetch-core/tests/hop_equivalence_support.rs +210 -0
- eggfetch-0.3.0/crates/eggfetch-core/tests/http_version_capability_tests.rs +150 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/integration.rs +5 -1
- eggfetch-0.3.0/crates/eggfetch-core/tests/lean_path_equivalence.rs +68 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/lean_policy_tests.rs +1 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/lean_route_tests.rs +1 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/native_http_body_tests.rs +43 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/native_tower_service_tests.rs +4 -0
- eggfetch-0.3.0/crates/eggfetch-core/tests/native_transport_failure_classification.rs +429 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/network_stream_tests.rs +15 -5
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/pool_tests.rs +1 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/proxy_tests.rs +46 -21
- eggfetch-0.3.0/crates/eggfetch-core/tests/public_api_contracts.rs +179 -0
- eggfetch-0.3.0/crates/eggfetch-core/tests/redirect_path_equivalence.rs +65 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/redirect_strict_tests.rs +4 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/request_failure_tests.rs +4 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/resolved_route_cache_tests.rs +4 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/resource_stabilization.rs +1 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/retry_integration.rs +4 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/streaming_decompression_tests.rs +10 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/timeout_tests.rs +122 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/tls_integration.rs +4 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/tls_response_completeness.rs +4 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/total_body_deadline_tests.rs +4 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/trailer_tests.rs +1 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/transport_metrics_tests.rs +22 -8
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-http-connect/Cargo.toml +1 -1
- eggfetch-0.3.0/crates/eggfetch-http-connect/README.md +125 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-http-connect/src/target.rs +23 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-http-connect/tests/wire.rs +13 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/Cargo.toml +2 -2
- eggfetch-0.3.0/crates/eggfetch-python/README.md +125 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/async_client.rs +62 -13
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/auth.rs +8 -2
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/client.rs +78 -26
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/conversion.rs +85 -11
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/cookies.rs +59 -10
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/errors.rs +73 -13
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/headers.rs +43 -8
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/lib.rs +47 -9
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/limits.rs +7 -3
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/multipart.rs +81 -19
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/network_stream.rs +111 -50
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/proxy.rs +63 -3
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/request_preparation.rs +58 -13
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/response.rs +33 -63
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/retry.rs +15 -5
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/streaming/async_iterators.rs +42 -14
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/streaming/sync_bridge.rs +36 -8
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/streaming/sync_iterators.rs +63 -8
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/streaming.rs +2 -3
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/timeout.rs +52 -17
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/tls.rs +5 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/trace_bridge.rs +56 -17
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/native_fixtures.py +10 -1
- eggfetch-0.3.0/crates/eggfetch-python/tests/compat/test_cookie_policy_parity.py +478 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_cookies.py +20 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_corrective_01_tls_and_proxy_trust_safety.py +17 -5
- eggfetch-0.3.0/crates/eggfetch-python/tests/compat/test_environment_isolation.py +367 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_h2_differential.py +5 -1
- eggfetch-0.3.0/crates/eggfetch-python/tests/compat/test_httpx2_origin_reachability.py +274 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_httpx2_websocket.py +27 -1
- eggfetch-0.3.0/crates/eggfetch-python/tests/compat/test_httpx_transport_bridge.py +84 -0
- eggfetch-0.3.0/crates/eggfetch-python/tests/compat/test_httpx_transport_sdk_construction.py +128 -0
- eggfetch-0.3.0/crates/eggfetch-python/tests/compat/test_redirect_policy_parity.py +519 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_resource_assertions.py +4 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_ssl_context_network_proof.py +1 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_ssl_context_translation.py +21 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_url_query.py +11 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/conftest.py +14 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/native_api_manifest.json +2 -2
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_differential.py +19 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_sync.py +10 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/pyproject.toml +4 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/_native.pyi +2 -2
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/_ssl_context.py +17 -6
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_client.py +16 -2
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_cookies.py +1 -2
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_transports.py +10 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_urls.py +67 -19
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/__init__.py +4 -2
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/__init__.pyi +8 -2
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_api.py +1 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_client.py +30 -0
- eggfetch-0.3.0/python/eggfetch/compat/httpx2/_request.py +67 -0
- eggfetch-0.3.0/python/eggfetch/compat/httpx2/_response.py +90 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_urls.py +60 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/websockets/_api.py +51 -9
- eggfetch-0.3.0/python/eggfetch/integrations/__init__.py +2 -0
- eggfetch-0.3.0/python/eggfetch/integrations/httpx.py +197 -0
- eggfetch-0.2.1/PKG-INFO +0 -271
- eggfetch-0.2.1/README.md +0 -244
- eggfetch-0.2.1/crates/eggfetch-core/README.md +0 -244
- eggfetch-0.2.1/crates/eggfetch-core/src/pipeline/lean.rs +0 -121
- eggfetch-0.2.1/crates/eggfetch-core/src/transport/mod.rs +0 -129
- eggfetch-0.2.1/crates/eggfetch-core/tests/public_api_contracts.rs +0 -78
- eggfetch-0.2.1/crates/eggfetch-http-connect/README.md +0 -244
- eggfetch-0.2.1/crates/eggfetch-python/README.md +0 -244
- eggfetch-0.2.1/python/eggfetch/compat/httpx2/_request.py +0 -7
- eggfetch-0.2.1/python/eggfetch/compat/httpx2/_response.py +0 -7
- {eggfetch-0.2.1 → eggfetch-0.3.0}/Cargo.toml +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/examples/quickstart.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/client/config.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/client/connectors.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/h2_headers.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/limits.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/proxy/environment.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/proxy/identity.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/proxy/no_proxy.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/response_decode.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/service.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/stream/mod.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/trace.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/alt_svc.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/connect_timeout.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/dialer.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/lifecycle.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/metrics.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/src/transport/standard_resolver.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/cross_feature_tests.rs +1 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/h3_alt_svc_discovery.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/h3_hardening.rs +1 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/h3_integration.rs +1 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/h3_interop_qualification.rs +1 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/http2_tests.rs +1 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/http3_tests.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/native_json.rs +1 -1
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/proxy_env_tests.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/response_body_public_shape.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/test_server.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-core/tests/tls_fixtures.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-http-connect/src/error.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-http-connect/src/lib.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-http-connect/src/request.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-http-connect/src/response.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/extensions.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/streaming/decoding.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/src/streaming/state.rs +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/__init__.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/conftest.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/fixtures.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_asgi.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_auth.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_auth_input_normalization.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_auth_replay.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_backends.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_behavior_cases.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_client.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_client_mutability_and_state.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_client_stream_overrides.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_config_objects.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_cookie_scope_parity.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_corrective_01_tls_network_proof.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_corrective_02_extensions_and_wire_metadata.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_corrective_03_network_stream_upgrade.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_corrective_kernel.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_downstream_portfolio.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_downstream_runner_negative.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_environment.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_exceptions.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_extensions.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_headers.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_hook_auth_ordering.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_hook_cookie_auth_ordering.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_hooks.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_httpx2_api_parity.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_httpx2_behavior.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_httpx2_sse.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_httpx_extras.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_httpx_reference_pinning.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_httpx_required.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_imports.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_lifecycle.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_lossy_conversions.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_merge_lossless.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_merge_matrix.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_mock_transport.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_mounts.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_multihop_cleanup.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_native_proxy_tls.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_native_timeout_classification.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_no_proxy_differential.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_oracle_negative.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_protocol_and_unsupported_options.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_proxy_differential.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_proxy_phase05_tracks.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_raw_stream_httpx_differential.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_raw_stream_lifecycle.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_redirect_state_machine_parity.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_request.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_request_construction_parity.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_request_stream_state.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_request_streaming.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_response.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_response_encoding_parity.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_response_metadata_parity.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_response_status_and_redirect_state.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_response_stream_state_parity.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_response_streaming.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_shutdown.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_soak.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_socks_transport.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_stream_resources.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_timeout_integration.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_timeout_proxysis.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_timeout_reference_differential.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_top_level_helpers_parity.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_trace_detection.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_transports.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_uds_transport.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/compat/test_wsgi.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_async.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_auth.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_close_races.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_cookie_auth.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_cookies.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_http2.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_interpreter_shutdown.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_native_api.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_parity.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_proxy.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_python_typing_surface.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_redirects.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_response_compat.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_retry.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/test_streaming.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/typing/compat_consumer.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/typing/consumer.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/typing/negative_sync_async_body.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/crates/eggfetch-python/tests/typing/negative_verify_and_return.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/__init__.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/__init__.pyi +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/__init__.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/__init__.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/__init__.pyi +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_asgi.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_auth.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_diagnostics.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_exceptions.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_headers.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_limits.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_mock.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_proxy.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_request.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_response.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_ssl_context.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_status_codes.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_stream.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_timeout.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx/_wsgi.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_alias.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_asgi.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_auth.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_config.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_cookies.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_exceptions.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_headers.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_mock.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_sse.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_status_codes.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_stream.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_transports.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/_wsgi.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/websockets/__init__.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/websockets/_exceptions.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/websockets/_ping.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/compat/httpx2/websockets/_transport.py +0 -0
- {eggfetch-0.2.1 → eggfetch-0.3.0}/python/eggfetch/py.typed +0 -0
|
@@ -19,15 +19,15 @@ dependencies = [
|
|
|
19
19
|
|
|
20
20
|
[[package]]
|
|
21
21
|
name = "alloc-no-stdlib"
|
|
22
|
-
version = "
|
|
22
|
+
version = "3.0.0"
|
|
23
23
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
24
|
-
checksum = "
|
|
24
|
+
checksum = "c2fb6cfd47bf496ff64095c20eaba0c201404ee38714d4142fcfa1dc334fcc7a"
|
|
25
25
|
|
|
26
26
|
[[package]]
|
|
27
27
|
name = "alloc-stdlib"
|
|
28
|
-
version = "0.
|
|
28
|
+
version = "0.3.0"
|
|
29
29
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
30
|
-
checksum = "
|
|
30
|
+
checksum = "0b5c1865780388bfa186411ab5f247819487fc4864c6e9c3106611fa347586e1"
|
|
31
31
|
dependencies = [
|
|
32
32
|
"alloc-no-stdlib",
|
|
33
33
|
]
|
|
@@ -96,9 +96,9 @@ checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
|
|
|
96
96
|
|
|
97
97
|
[[package]]
|
|
98
98
|
name = "async-compression"
|
|
99
|
-
version = "0.4.
|
|
99
|
+
version = "0.4.51"
|
|
100
100
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
101
|
-
checksum = "
|
|
101
|
+
checksum = "9d5755640120b24961f8231e05892e4a4f7e0d04e8aeca161508c9c397946970"
|
|
102
102
|
dependencies = [
|
|
103
103
|
"compression-codecs",
|
|
104
104
|
"compression-core",
|
|
@@ -159,9 +159,9 @@ checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
|
|
|
159
159
|
|
|
160
160
|
[[package]]
|
|
161
161
|
name = "brotli"
|
|
162
|
-
version = "
|
|
162
|
+
version = "9.1.1"
|
|
163
163
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
164
|
-
checksum = "
|
|
164
|
+
checksum = "627b7cfb0578f0eafce087a90fcd40add1231900b69e4d4de2d456260a4f5d81"
|
|
165
165
|
dependencies = [
|
|
166
166
|
"alloc-no-stdlib",
|
|
167
167
|
"alloc-stdlib",
|
|
@@ -170,9 +170,9 @@ dependencies = [
|
|
|
170
170
|
|
|
171
171
|
[[package]]
|
|
172
172
|
name = "brotli-decompressor"
|
|
173
|
-
version = "
|
|
173
|
+
version = "6.2.0"
|
|
174
174
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
175
|
-
checksum = "
|
|
175
|
+
checksum = "34c6783f42c21c952ad7112b354f0ba2f10760e9decea5b1b60523d6e270faaf"
|
|
176
176
|
dependencies = [
|
|
177
177
|
"alloc-no-stdlib",
|
|
178
178
|
"alloc-stdlib",
|
|
@@ -316,9 +316,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
|
|
|
316
316
|
|
|
317
317
|
[[package]]
|
|
318
318
|
name = "compression-codecs"
|
|
319
|
-
version = "0.4.
|
|
319
|
+
version = "0.4.46"
|
|
320
320
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
321
|
-
checksum = "
|
|
321
|
+
checksum = "cae36683101b2899f48bd31f8db9839437356188e3b1ff23096e73dab09ba8fe"
|
|
322
322
|
dependencies = [
|
|
323
323
|
"brotli",
|
|
324
324
|
"compression-core",
|
|
@@ -330,9 +330,9 @@ dependencies = [
|
|
|
330
330
|
|
|
331
331
|
[[package]]
|
|
332
332
|
name = "compression-core"
|
|
333
|
-
version = "0.4.
|
|
333
|
+
version = "0.4.34"
|
|
334
334
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
335
|
-
checksum = "
|
|
335
|
+
checksum = "2ebdda89edc534bf8d5dd2857562633b6495557e5846552ade994b99ed13c36a"
|
|
336
336
|
|
|
337
337
|
[[package]]
|
|
338
338
|
name = "convert_case"
|
|
@@ -505,7 +505,7 @@ dependencies = [
|
|
|
505
505
|
|
|
506
506
|
[[package]]
|
|
507
507
|
name = "eggfetch-cli"
|
|
508
|
-
version = "0.
|
|
508
|
+
version = "0.3.0"
|
|
509
509
|
dependencies = [
|
|
510
510
|
"anyhow",
|
|
511
511
|
"bytes",
|
|
@@ -514,15 +514,20 @@ dependencies = [
|
|
|
514
514
|
"eggfetch-core",
|
|
515
515
|
"flate2",
|
|
516
516
|
"futures-util",
|
|
517
|
+
"h2",
|
|
517
518
|
"http",
|
|
519
|
+
"rcgen",
|
|
520
|
+
"rustls",
|
|
518
521
|
"serde_json",
|
|
519
522
|
"tempfile",
|
|
520
523
|
"tokio",
|
|
524
|
+
"tokio-rustls",
|
|
525
|
+
"tracing",
|
|
521
526
|
]
|
|
522
527
|
|
|
523
528
|
[[package]]
|
|
524
529
|
name = "eggfetch-core"
|
|
525
|
-
version = "0.
|
|
530
|
+
version = "0.3.0"
|
|
526
531
|
dependencies = [
|
|
527
532
|
"async-compression",
|
|
528
533
|
"base64 0.23.1",
|
|
@@ -568,7 +573,7 @@ dependencies = [
|
|
|
568
573
|
|
|
569
574
|
[[package]]
|
|
570
575
|
name = "eggfetch-ffi"
|
|
571
|
-
version = "0.
|
|
576
|
+
version = "0.3.0"
|
|
572
577
|
dependencies = [
|
|
573
578
|
"bytes",
|
|
574
579
|
"eggfetch-core",
|
|
@@ -580,7 +585,7 @@ dependencies = [
|
|
|
580
585
|
|
|
581
586
|
[[package]]
|
|
582
587
|
name = "eggfetch-http-connect"
|
|
583
|
-
version = "0.
|
|
588
|
+
version = "0.3.0"
|
|
584
589
|
dependencies = [
|
|
585
590
|
"base64 0.23.1",
|
|
586
591
|
"thiserror",
|
|
@@ -589,7 +594,7 @@ dependencies = [
|
|
|
589
594
|
|
|
590
595
|
[[package]]
|
|
591
596
|
name = "eggfetch-node"
|
|
592
|
-
version = "0.
|
|
597
|
+
version = "0.3.0"
|
|
593
598
|
dependencies = [
|
|
594
599
|
"eggfetch-ffi",
|
|
595
600
|
"napi",
|
|
@@ -601,7 +606,7 @@ dependencies = [
|
|
|
601
606
|
|
|
602
607
|
[[package]]
|
|
603
608
|
name = "eggfetch-python"
|
|
604
|
-
version = "0.
|
|
609
|
+
version = "0.3.0"
|
|
605
610
|
dependencies = [
|
|
606
611
|
"bytes",
|
|
607
612
|
"eggfetch-core",
|
|
@@ -642,7 +647,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
642
647
|
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
|
643
648
|
dependencies = [
|
|
644
649
|
"libc",
|
|
645
|
-
"windows-sys 0.
|
|
650
|
+
"windows-sys 0.52.0",
|
|
646
651
|
]
|
|
647
652
|
|
|
648
653
|
[[package]]
|
|
@@ -1097,7 +1102,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46"
|
|
|
1097
1102
|
dependencies = [
|
|
1098
1103
|
"hermit-abi",
|
|
1099
1104
|
"libc",
|
|
1100
|
-
"windows-sys 0.
|
|
1105
|
+
"windows-sys 0.52.0",
|
|
1101
1106
|
]
|
|
1102
1107
|
|
|
1103
1108
|
[[package]]
|
|
@@ -1545,9 +1550,9 @@ dependencies = [
|
|
|
1545
1550
|
|
|
1546
1551
|
[[package]]
|
|
1547
1552
|
name = "quinn-proto"
|
|
1548
|
-
version = "0.11.
|
|
1553
|
+
version = "0.11.18"
|
|
1549
1554
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1550
|
-
checksum = "
|
|
1555
|
+
checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc"
|
|
1551
1556
|
dependencies = [
|
|
1552
1557
|
"bytes",
|
|
1553
1558
|
"getrandom 0.4.3",
|
|
@@ -1576,7 +1581,7 @@ dependencies = [
|
|
|
1576
1581
|
"once_cell",
|
|
1577
1582
|
"socket2",
|
|
1578
1583
|
"tracing",
|
|
1579
|
-
"windows-sys 0.
|
|
1584
|
+
"windows-sys 0.52.0",
|
|
1580
1585
|
]
|
|
1581
1586
|
|
|
1582
1587
|
[[package]]
|
|
@@ -1751,14 +1756,14 @@ dependencies = [
|
|
|
1751
1756
|
"errno",
|
|
1752
1757
|
"libc",
|
|
1753
1758
|
"linux-raw-sys",
|
|
1754
|
-
"windows-sys 0.
|
|
1759
|
+
"windows-sys 0.52.0",
|
|
1755
1760
|
]
|
|
1756
1761
|
|
|
1757
1762
|
[[package]]
|
|
1758
1763
|
name = "rustls"
|
|
1759
|
-
version = "0.23.
|
|
1764
|
+
version = "0.23.46"
|
|
1760
1765
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1761
|
-
checksum = "
|
|
1766
|
+
checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf"
|
|
1762
1767
|
dependencies = [
|
|
1763
1768
|
"log",
|
|
1764
1769
|
"once_cell",
|
|
@@ -1793,9 +1798,9 @@ dependencies = [
|
|
|
1793
1798
|
|
|
1794
1799
|
[[package]]
|
|
1795
1800
|
name = "rustls-webpki"
|
|
1796
|
-
version = "0.103.
|
|
1801
|
+
version = "0.103.16"
|
|
1797
1802
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1798
|
-
checksum = "
|
|
1803
|
+
checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281"
|
|
1799
1804
|
dependencies = [
|
|
1800
1805
|
"ring",
|
|
1801
1806
|
"rustls-pki-types",
|
|
@@ -2010,7 +2015,7 @@ dependencies = [
|
|
|
2010
2015
|
"getrandom 0.4.3",
|
|
2011
2016
|
"once_cell",
|
|
2012
2017
|
"rustix",
|
|
2013
|
-
"windows-sys 0.
|
|
2018
|
+
"windows-sys 0.52.0",
|
|
2014
2019
|
]
|
|
2015
2020
|
|
|
2016
2021
|
[[package]]
|
|
@@ -2110,9 +2115,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
|
|
2110
2115
|
|
|
2111
2116
|
[[package]]
|
|
2112
2117
|
name = "tokio"
|
|
2113
|
-
version = "1.
|
|
2118
|
+
version = "1.53.3"
|
|
2114
2119
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2115
|
-
checksum = "
|
|
2120
|
+
checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e"
|
|
2116
2121
|
dependencies = [
|
|
2117
2122
|
"bytes",
|
|
2118
2123
|
"libc",
|
|
@@ -2360,14 +2365,14 @@ version = "0.26.11"
|
|
|
2360
2365
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2361
2366
|
checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9"
|
|
2362
2367
|
dependencies = [
|
|
2363
|
-
"webpki-roots 1.0.
|
|
2368
|
+
"webpki-roots 1.0.10",
|
|
2364
2369
|
]
|
|
2365
2370
|
|
|
2366
2371
|
[[package]]
|
|
2367
2372
|
name = "webpki-roots"
|
|
2368
|
-
version = "1.0.
|
|
2373
|
+
version = "1.0.10"
|
|
2369
2374
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2370
|
-
checksum = "
|
|
2375
|
+
checksum = "1c1c8e20c8a38fc7d65abfe74eb7280e4aa667e8eec8bc84996d2874810748d9"
|
|
2371
2376
|
dependencies = [
|
|
2372
2377
|
"rustls-pki-types",
|
|
2373
2378
|
]
|
|
@@ -2378,7 +2383,7 @@ version = "0.1.11"
|
|
|
2378
2383
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2379
2384
|
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
|
2380
2385
|
dependencies = [
|
|
2381
|
-
"windows-sys 0.
|
|
2386
|
+
"windows-sys 0.52.0",
|
|
2382
2387
|
]
|
|
2383
2388
|
|
|
2384
2389
|
[[package]]
|
|
@@ -2595,27 +2600,27 @@ checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
|
|
|
2595
2600
|
|
|
2596
2601
|
[[package]]
|
|
2597
2602
|
name = "zstd"
|
|
2598
|
-
version = "0.
|
|
2603
|
+
version = "0.14.3"
|
|
2599
2604
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2600
|
-
checksum = "
|
|
2605
|
+
checksum = "db3ae9bf90af6e40197bef767eeefc46ad6397420fe873830bd85e5fbbfb3c70"
|
|
2601
2606
|
dependencies = [
|
|
2602
2607
|
"zstd-safe",
|
|
2603
2608
|
]
|
|
2604
2609
|
|
|
2605
2610
|
[[package]]
|
|
2606
2611
|
name = "zstd-safe"
|
|
2607
|
-
version = "
|
|
2612
|
+
version = "8.2.0"
|
|
2608
2613
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2609
|
-
checksum = "
|
|
2614
|
+
checksum = "ded520f16b29e1a9b771c722221b2b0a0398c2316d9bb3c42b458a5414d7434b"
|
|
2610
2615
|
dependencies = [
|
|
2611
2616
|
"zstd-sys",
|
|
2612
2617
|
]
|
|
2613
2618
|
|
|
2614
2619
|
[[package]]
|
|
2615
2620
|
name = "zstd-sys"
|
|
2616
|
-
version = "2.
|
|
2621
|
+
version = "2.1.2+zstd.1.5.7"
|
|
2617
2622
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2618
|
-
checksum = "
|
|
2623
|
+
checksum = "481ada9c543b2323cbb7bbdbb5249177fbf0188ed959ed2c15e4b22421c84ed3"
|
|
2619
2624
|
dependencies = [
|
|
2620
2625
|
"cc",
|
|
2621
2626
|
"pkg-config",
|
eggfetch-0.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: eggfetch
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Classifier: Development Status :: 3 - Alpha
|
|
5
|
+
Classifier: Programming Language :: Python :: 3
|
|
6
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
7
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
12
|
+
Classifier: Programming Language :: Rust
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Requires-Dist: httpx>=0.28,<0.29 ; extra == 'httpx-transport'
|
|
15
|
+
Requires-Dist: pytest>=8.4 ; extra == 'test'
|
|
16
|
+
Requires-Dist: pytest-asyncio>=1.0 ; extra == 'test'
|
|
17
|
+
Provides-Extra: httpx-transport
|
|
18
|
+
Provides-Extra: test
|
|
19
|
+
Summary: Python bindings for eggfetch
|
|
20
|
+
Keywords: http,client,httpx,async,rust
|
|
21
|
+
Home-Page: https://github.com/eggstack/eggfetch
|
|
22
|
+
Author: eggfetch contributors
|
|
23
|
+
License: MIT
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
26
|
+
Project-URL: Homepage, https://github.com/eggstack/eggfetch
|
|
27
|
+
Project-URL: Repository, https://github.com/eggstack/eggfetch
|
|
28
|
+
|
|
29
|
+
# eggfetch
|
|
30
|
+
|
|
31
|
+
[](https://github.com/eggstack/eggfetch/actions/workflows/ci.yml)
|
|
32
|
+
[](https://crates.io/crates/eggfetch-core)
|
|
33
|
+
[](https://crates.io/crates/d/eggfetch-core)
|
|
34
|
+
[](https://pypi.org/project/eggfetch/)
|
|
35
|
+
[](https://pepy.tech/projects/eggfetch)
|
|
36
|
+
[](LICENSE-MIT)
|
|
37
|
+
|
|
38
|
+
eggfetch is a Rust-native async HTTP client engine (tokio + hyper) with Python bindings and a CLI. All networking lives in `eggfetch-core`; the Python sync API blocks on the async engine while releasing the GIL, and the async API integrates with asyncio.
|
|
39
|
+
|
|
40
|
+
## Features
|
|
41
|
+
|
|
42
|
+
- **HTTP/1.1, HTTP/2, and experimental HTTP/3** with ALPN negotiation
|
|
43
|
+
- **Streaming** request and response bodies with backpressure, plus trailers
|
|
44
|
+
- **Pooling and phase-aware timeouts** (pool/connect/write/read/total) with transport metrics
|
|
45
|
+
- **TLS** via rustls: additive or replacement CA roots, mTLS, version policy ([TLS](docs/concepts/tls.md))
|
|
46
|
+
- **Proxy**: HTTP forwarding, HTTPS CONNECT, proxy auth, `NO_PROXY`, SOCKS5 ([proxy](docs/concepts/proxy.md))
|
|
47
|
+
- **Cookies, auth, multipart, compression**: RFC 6265 jar, Basic/Bearer, streaming uploads, gzip/brotli/zstd/deflate
|
|
48
|
+
- **Retries and redirects**: backoff with `Retry-After`, replayable-body redirect handling
|
|
49
|
+
- **Python**: requests/HTTPX-compatible sync and async APIs plus versioned `eggfetch.compat.httpx` (0.28.1) and `eggfetch.compat.httpx2` (2.12.0) facades ([compatibility](docs/reference/compatibility.md))
|
|
50
|
+
- **CLI** with streaming output, machine-readable formats, and shell completions ([guide](docs/cli/guide.md))
|
|
51
|
+
|
|
52
|
+
## Installation
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
pip install eggfetch # Python 3.10–3.15
|
|
56
|
+
cargo install eggfetch-cli # CLI
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```toml
|
|
60
|
+
[dependencies]
|
|
61
|
+
eggfetch-core = "0.2" # Rust (MSRV 1.89)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
See [installation](docs/getting-started/installation.md) for wheels, feature recipes, and platform support.
|
|
65
|
+
|
|
66
|
+
## Quickstart
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
import eggfetch
|
|
70
|
+
|
|
71
|
+
r = eggfetch.get("https://httpbin.org/get")
|
|
72
|
+
print(r.status_code, r.json())
|
|
73
|
+
|
|
74
|
+
with eggfetch.Client(headers={"User-Agent": "my-app/1.0"}) as client:
|
|
75
|
+
r = client.post("https://httpbin.org/post", json={"key": "value"})
|
|
76
|
+
print(r.status_code)
|
|
77
|
+
|
|
78
|
+
with client.stream("GET", "https://httpbin.org/stream-bytes/10000") as r:
|
|
79
|
+
for chunk in r.iter_bytes():
|
|
80
|
+
print(f"chunk: {len(chunk)} bytes")
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
import asyncio
|
|
85
|
+
import eggfetch
|
|
86
|
+
|
|
87
|
+
async def main():
|
|
88
|
+
async with eggfetch.AsyncClient() as client:
|
|
89
|
+
responses = await asyncio.gather(
|
|
90
|
+
client.get("https://httpbin.org/get"),
|
|
91
|
+
client.get("https://httpbin.org/ip"),
|
|
92
|
+
)
|
|
93
|
+
for resp in responses:
|
|
94
|
+
print(resp.status_code, resp.json())
|
|
95
|
+
|
|
96
|
+
asyncio.run(main())
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```rust
|
|
100
|
+
use eggfetch_core::{Client, Timeout};
|
|
101
|
+
use futures_util::StreamExt;
|
|
102
|
+
|
|
103
|
+
#[tokio::main]
|
|
104
|
+
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
105
|
+
let client = Client::builder()
|
|
106
|
+
.timeout(Timeout::from_secs(30))
|
|
107
|
+
.follow_redirects(true)
|
|
108
|
+
.user_agent("my-app/1.0")
|
|
109
|
+
.build();
|
|
110
|
+
|
|
111
|
+
let mut resp = client.get("https://httpbin.org/get")?.send().await?;
|
|
112
|
+
println!("Status: {}", resp.status());
|
|
113
|
+
println!("Body: {}", resp.text().await?);
|
|
114
|
+
|
|
115
|
+
let mut resp = client.get("https://httpbin.org/stream/3")?.send().await?;
|
|
116
|
+
let mut stream = resp.bytes_stream()?;
|
|
117
|
+
while let Some(chunk) = stream.next().await {
|
|
118
|
+
println!("chunk: {} bytes", chunk?.len());
|
|
119
|
+
}
|
|
120
|
+
Ok(())
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
eggfetch https://httpbin.org/get
|
|
126
|
+
eggfetch -X POST https://httpbin.org/post --json '{"key": "value"}'
|
|
127
|
+
eggfetch --auth user:pass https://httpbin.org/basic-auth/user/pass
|
|
128
|
+
eggfetch --output file.bin https://httpbin.org/stream-bytes/10000
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Examples
|
|
132
|
+
|
|
133
|
+
Runnable starting points (each takes an optional base URL, default `https://httpbin.org`):
|
|
134
|
+
|
|
135
|
+
- `cargo run -p eggfetch-core --example quickstart` — configured GET/POST, timeout override, auth, streaming
|
|
136
|
+
- `python examples/python_sync.py` — sync client, JSON POST, streaming download
|
|
137
|
+
- `python examples/python_async.py` — async client with concurrent requests
|
|
138
|
+
|
|
139
|
+
More patterns are in [`docs/cookbook/`](docs/cookbook/).
|
|
140
|
+
|
|
141
|
+
## Documentation
|
|
142
|
+
|
|
143
|
+
- [Getting started](docs/getting-started/quickstart.md) — installation and first requests
|
|
144
|
+
- [Rust guide](docs/rust/guide.md) · [Python guide](docs/python/guide.md) · [CLI guide](docs/cli/guide.md)
|
|
145
|
+
- [Migration](docs/migration/from-httpx.md) from HTTPX/requests · [Compatibility](docs/reference/compatibility.md) · [C ABI / FFI](docs/ffi/)
|
|
146
|
+
|
|
147
|
+
## Security
|
|
148
|
+
|
|
149
|
+
All `Debug`/`Display`/error output redacts credentials, cookies, and tokens. See [SECURITY.md](SECURITY.md) to report a vulnerability.
|
|
150
|
+
|
|
151
|
+
## License
|
|
152
|
+
|
|
153
|
+
eggfetch is licensed under the [MIT License](LICENSE-MIT).
|
|
154
|
+
|
eggfetch-0.3.0/README.md
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# eggfetch
|
|
2
|
+
|
|
3
|
+
[](https://github.com/eggstack/eggfetch/actions/workflows/ci.yml)
|
|
4
|
+
[](https://crates.io/crates/eggfetch-core)
|
|
5
|
+
[](https://crates.io/crates/d/eggfetch-core)
|
|
6
|
+
[](https://pypi.org/project/eggfetch/)
|
|
7
|
+
[](https://pepy.tech/projects/eggfetch)
|
|
8
|
+
[](LICENSE-MIT)
|
|
9
|
+
|
|
10
|
+
eggfetch is a Rust-native async HTTP client engine (tokio + hyper) with Python bindings and a CLI. All networking lives in `eggfetch-core`; the Python sync API blocks on the async engine while releasing the GIL, and the async API integrates with asyncio.
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- **HTTP/1.1, HTTP/2, and experimental HTTP/3** with ALPN negotiation
|
|
15
|
+
- **Streaming** request and response bodies with backpressure, plus trailers
|
|
16
|
+
- **Pooling and phase-aware timeouts** (pool/connect/write/read/total) with transport metrics
|
|
17
|
+
- **TLS** via rustls: additive or replacement CA roots, mTLS, version policy ([TLS](docs/concepts/tls.md))
|
|
18
|
+
- **Proxy**: HTTP forwarding, HTTPS CONNECT, proxy auth, `NO_PROXY`, SOCKS5 ([proxy](docs/concepts/proxy.md))
|
|
19
|
+
- **Cookies, auth, multipart, compression**: RFC 6265 jar, Basic/Bearer, streaming uploads, gzip/brotli/zstd/deflate
|
|
20
|
+
- **Retries and redirects**: backoff with `Retry-After`, replayable-body redirect handling
|
|
21
|
+
- **Python**: requests/HTTPX-compatible sync and async APIs plus versioned `eggfetch.compat.httpx` (0.28.1) and `eggfetch.compat.httpx2` (2.12.0) facades ([compatibility](docs/reference/compatibility.md))
|
|
22
|
+
- **CLI** with streaming output, machine-readable formats, and shell completions ([guide](docs/cli/guide.md))
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
pip install eggfetch # Python 3.10–3.15
|
|
28
|
+
cargo install eggfetch-cli # CLI
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```toml
|
|
32
|
+
[dependencies]
|
|
33
|
+
eggfetch-core = "0.2" # Rust (MSRV 1.89)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
See [installation](docs/getting-started/installation.md) for wheels, feature recipes, and platform support.
|
|
37
|
+
|
|
38
|
+
## Quickstart
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
import eggfetch
|
|
42
|
+
|
|
43
|
+
r = eggfetch.get("https://httpbin.org/get")
|
|
44
|
+
print(r.status_code, r.json())
|
|
45
|
+
|
|
46
|
+
with eggfetch.Client(headers={"User-Agent": "my-app/1.0"}) as client:
|
|
47
|
+
r = client.post("https://httpbin.org/post", json={"key": "value"})
|
|
48
|
+
print(r.status_code)
|
|
49
|
+
|
|
50
|
+
with client.stream("GET", "https://httpbin.org/stream-bytes/10000") as r:
|
|
51
|
+
for chunk in r.iter_bytes():
|
|
52
|
+
print(f"chunk: {len(chunk)} bytes")
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
import asyncio
|
|
57
|
+
import eggfetch
|
|
58
|
+
|
|
59
|
+
async def main():
|
|
60
|
+
async with eggfetch.AsyncClient() as client:
|
|
61
|
+
responses = await asyncio.gather(
|
|
62
|
+
client.get("https://httpbin.org/get"),
|
|
63
|
+
client.get("https://httpbin.org/ip"),
|
|
64
|
+
)
|
|
65
|
+
for resp in responses:
|
|
66
|
+
print(resp.status_code, resp.json())
|
|
67
|
+
|
|
68
|
+
asyncio.run(main())
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```rust
|
|
72
|
+
use eggfetch_core::{Client, Timeout};
|
|
73
|
+
use futures_util::StreamExt;
|
|
74
|
+
|
|
75
|
+
#[tokio::main]
|
|
76
|
+
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
77
|
+
let client = Client::builder()
|
|
78
|
+
.timeout(Timeout::from_secs(30))
|
|
79
|
+
.follow_redirects(true)
|
|
80
|
+
.user_agent("my-app/1.0")
|
|
81
|
+
.build();
|
|
82
|
+
|
|
83
|
+
let mut resp = client.get("https://httpbin.org/get")?.send().await?;
|
|
84
|
+
println!("Status: {}", resp.status());
|
|
85
|
+
println!("Body: {}", resp.text().await?);
|
|
86
|
+
|
|
87
|
+
let mut resp = client.get("https://httpbin.org/stream/3")?.send().await?;
|
|
88
|
+
let mut stream = resp.bytes_stream()?;
|
|
89
|
+
while let Some(chunk) = stream.next().await {
|
|
90
|
+
println!("chunk: {} bytes", chunk?.len());
|
|
91
|
+
}
|
|
92
|
+
Ok(())
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
eggfetch https://httpbin.org/get
|
|
98
|
+
eggfetch -X POST https://httpbin.org/post --json '{"key": "value"}'
|
|
99
|
+
eggfetch --auth user:pass https://httpbin.org/basic-auth/user/pass
|
|
100
|
+
eggfetch --output file.bin https://httpbin.org/stream-bytes/10000
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Examples
|
|
104
|
+
|
|
105
|
+
Runnable starting points (each takes an optional base URL, default `https://httpbin.org`):
|
|
106
|
+
|
|
107
|
+
- `cargo run -p eggfetch-core --example quickstart` — configured GET/POST, timeout override, auth, streaming
|
|
108
|
+
- `python examples/python_sync.py` — sync client, JSON POST, streaming download
|
|
109
|
+
- `python examples/python_async.py` — async client with concurrent requests
|
|
110
|
+
|
|
111
|
+
More patterns are in [`docs/cookbook/`](docs/cookbook/).
|
|
112
|
+
|
|
113
|
+
## Documentation
|
|
114
|
+
|
|
115
|
+
- [Getting started](docs/getting-started/quickstart.md) — installation and first requests
|
|
116
|
+
- [Rust guide](docs/rust/guide.md) · [Python guide](docs/python/guide.md) · [CLI guide](docs/cli/guide.md)
|
|
117
|
+
- [Migration](docs/migration/from-httpx.md) from HTTPX/requests · [Compatibility](docs/reference/compatibility.md) · [C ABI / FFI](docs/ffi/)
|
|
118
|
+
|
|
119
|
+
## Security
|
|
120
|
+
|
|
121
|
+
All `Debug`/`Display`/error output redacts credentials, cookies, and tokens. See [SECURITY.md](SECURITY.md) to report a vulnerability.
|
|
122
|
+
|
|
123
|
+
## License
|
|
124
|
+
|
|
125
|
+
eggfetch is licensed under the [MIT License](LICENSE-MIT).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "eggfetch-core"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.0"
|
|
4
4
|
edition.workspace = true
|
|
5
5
|
rust-version.workspace = true
|
|
6
6
|
license.workspace = true
|
|
@@ -82,7 +82,7 @@ test-util = ["tokio/test-util"]
|
|
|
82
82
|
|
|
83
83
|
[dependencies]
|
|
84
84
|
bytes = "1"
|
|
85
|
-
eggfetch-http-connect = { version = "0.
|
|
85
|
+
eggfetch-http-connect = { version = "0.3.0", path = "../eggfetch-http-connect", optional = true }
|
|
86
86
|
futures-core = "0.3"
|
|
87
87
|
futures-util = { version = "0.3", default-features = false, features = ["alloc"] }
|
|
88
88
|
http = "1"
|
|
@@ -109,8 +109,8 @@ cookie = { version = "0.18", default-features = false, features = ["percent-enco
|
|
|
109
109
|
async-compression = { version = "0.4", default-features = false, features = ["tokio"], optional = true }
|
|
110
110
|
tokio-util = { version = "0.7", features = ["io"], optional = true }
|
|
111
111
|
flate2 = { version = "1", optional = true }
|
|
112
|
-
brotli = { version = "
|
|
113
|
-
zstd = { version = "0.
|
|
112
|
+
brotli = { version = "9", optional = true, default-features = false, features = ["std"] }
|
|
113
|
+
zstd = { version = "0.14", optional = true }
|
|
114
114
|
tracing = { version = "0.1", optional = true }
|
|
115
115
|
getrandom = { version = "0.2", optional = true }
|
|
116
116
|
httpdate = { version = "1", optional = true }
|
|
@@ -131,3 +131,11 @@ proptest = "=1.5.0"
|
|
|
131
131
|
rcgen = "0.13"
|
|
132
132
|
tempfile = "3"
|
|
133
133
|
tokio = { version = "1", features = ["io-util", "net", "macros", "sync", "time", "rt-multi-thread"] }
|
|
134
|
+
|
|
135
|
+
# The quickstart example exercises redirect following and basic auth, which
|
|
136
|
+
# are compiled out of the lean profiles. Declaring the requirement keeps the
|
|
137
|
+
# example out of the lean-profile `--all-targets` compile instead of failing
|
|
138
|
+
# it, so the whole-suite lean gate can be green.
|
|
139
|
+
[[example]]
|
|
140
|
+
name = "quickstart"
|
|
141
|
+
required-features = ["redirects", "basic-auth"]
|