httpx/docs/environment_variables.md
Florimond Manca 074cd25b04
Document client block-usage and close() (#487)
* Document client context manager vs close() usage

* Convert client snippets to use context-managed syntax
2019-10-19 13:52:44 +02:00

4.5 KiB

Environment Variables

The HTTPX library can be configured via environment variables. Environment variables are used by default. To ignore environment variables, trust_env has to be set False. There are two ways to set trust_env to disable environment variables:

  • On the client via httpx.Client(trust_env=False)
  • Per request via client.get("<url>", trust_env=False)

Here is a list of environment variables that HTTPX recognizes and what function they serve:

HTTPX_DEBUG

Valid values: 1, true

If this environment variable is set to a valid value then low-level details about the execution of HTTP requests will be logged to stderr.

This can help you debug issues and see what's exactly being sent over the wire and to which location.

Example:

# test_script.py
import httpx

with httpx.Client() as client:
    r = client.get("https://google.com")
user@host:~$ HTTPX_DEBUG=1 python test_script.py
20:54:17.585 - httpx.dispatch.connection_pool - acquire_connection origin=Origin(scheme='https' host='www.google.com' port=443)
20:54:17.585 - httpx.dispatch.connection_pool - new_connection connection=HTTPConnection(origin=Origin(scheme='https' host='www.google.com' port=443))
20:54:17.590 - httpx.dispatch.connection - start_connect host='www.google.com' port=443 timeout=TimeoutConfig(timeout=5.0)
20:54:17.651 - httpx.dispatch.connection - connected http_version='HTTP/2'
20:54:17.651 - httpx.dispatch.http2 - send_headers stream_id=1 headers=[(b':method', b'GET'), (b':authority', b'www.google.com'), ...]
20:54:17.652 - httpx.dispatch.http2 - end_stream stream_id=1
20:54:17.681 - httpx.dispatch.http2 - receive_event stream_id=0 event=<RemoteSettingsChanged changed_settings:{...}>
20:54:17.681 - httpx.dispatch.http2 - receive_event stream_id=0 event=<WindowUpdated stream_id:0, delta:983041>
20:54:17.682 - httpx.dispatch.http2 - receive_event stream_id=0 event=<SettingsAcknowledged changed_settings:{}>
20:54:17.739 - httpx.dispatch.http2 - receive_event stream_id=1 event=<ResponseReceived stream_id:1, headers:[(b':status', b'200'), ...]>
20:54:17.741 - httpx.dispatch.http2 - receive_event stream_id=1 event=<DataReceived stream_id:1, flow_controlled_length:5224 data:>
20:54:17.742 - httpx.dispatch.http2 - receive_event stream_id=1 event=<DataReceived stream_id:1, flow_controlled_length:59, data:>
20:54:17.742 - httpx.dispatch.http2 - receive_event stream_id=1 event=<StreamEnded stream_id:1>
20:54:17.742 - httpx.dispatch.http2 - receive_event stream_id=0 event=<PingReceived ping_data:0000000000000000>
20:54:17.743 - httpx.dispatch.connection_pool - release_connection connection=HTTPConnection(origin=Origin(scheme='https' host='www.google.com' port=443))

SSLKEYLOGFILE

Valid values: a filename

If this environment variable is set, TLS keys will be appended to the specified file, creating it if it doesn't exist, whenever key material is generated or received. The keylog file is designed for debugging purposes only.

Support for SSLKEYLOGFILE requires Python 3.8 and OpenSSL 1.1.1 or newer.

Example:

# test_script.py
import httpx

with httpx.Client() as client:
    r = client.get("https://google.com")
SSLKEYLOGFILE=test.log python test_script.py
cat test.log
# TLS secrets log file, generated by OpenSSL / Python
SERVER_HANDSHAKE_TRAFFIC_SECRET XXXX
EXPORTER_SECRET XXXX
SERVER_TRAFFIC_SECRET_0 XXXX
CLIENT_HANDSHAKE_TRAFFIC_SECRET XXXX
CLIENT_TRAFFIC_SECRET_0 XXXX
SERVER_HANDSHAKE_TRAFFIC_SECRET XXXX
EXPORTER_SECRET XXXX
SERVER_TRAFFIC_SECRET_0 XXXX
CLIENT_HANDSHAKE_TRAFFIC_SECRET XXXX
CLIENT_TRAFFIC_SECRET_0 XXXX

SSL_CERT_FILE

Valid values: a filename

if this environment variable is set then HTTPX will load CA certificate from the specified file instead of the default location.

Example:

SSL_CERT_FILE=/path/to/ca-certs/ca-bundle.crt python -c "import httpx; httpx.get('https://example.com')"

SSL_CERT_DIR

Valid values: a directory

if this environment variable is set then HTTPX will load CA certificates from the specified location instead of the default location.

Example:

SSL_CERT_DIR=/path/to/ca-certs/ python -c "import httpx; httpx.get('https://example.com')"

HTTP_PROXY, HTTPS_PROXY, ALL_PROXY

Valid values: A URL to a proxy

Sets the proxy to be used for http, https, or all requests respectively.

export HTTP_PROXY=http://127.0.0.1:3080

# This request will be sent through the proxy
python -c "import httpx; httpx.get('http://example.com')"