Skip to content

Custom TLS Client Configs

To use custom TLS Client configuration follow these instructions:

Default TLS Config

The TLSConfig class provides a structured and flexible way to configure TLS-specific settings for HTTP requests. It supports features like custom headers, cookie handling, proxy configuration, and advanced TLS options.

Example: Initialize a TLSConfig object using predefined or default settings:

>>> import tls_requests
>>> kwargs = {
    "catchPanics": false,
    "certificatePinningHosts": {},
    "customTlsClient": {},
    "followRedirects": false,
    "forceHttp1": false,
    "headerOrder": [
        "accept",
        "user-agent",
        "accept-encoding",
        "accept-language"
    ],
    "headers": {
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
        "accept-encoding": "gzip, deflate, br",
        "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"
    },
    "insecureSkipVerify": false,
    "isByteRequest": false,
    "isRotatingProxy": false,
    "proxyUrl": "",
    "requestBody": "",
    "requestCookies": [
        {
            "_name": "foo",
            "value": "bar",
        },
        {
            "_name": "bar",
            "value": "foo",
        },
    ],
    "requestMethod": "GET",
    "requestUrl": "https://microsoft.com",
    "sessionId": "2my-session-id",
    "timeoutSeconds": 30,
    "tlsClientIdentifier": "chrome_120",
    "withDebug": false,
    "withDefaultCookieJar": false,
    "withRandomTLSExtensionOrder": false,
    "withoutCookieJar": false
}
>>> obj = tls_requests.tls.TLSConfig.from_kwargs(**kwargs)
>>> config_kwargs = obj.to_dict()
>>> r = tls_requests.get("https://httpbin.org/get", **config_kwargs)
>>> r
<Response [200 OK]>

Custom TLS Client Configuration

The CustomTLSClientConfig class defines advanced configuration options for customizing TLS client behavior. It includes support for ALPN, ALPS protocols, certificate compression, HTTP/2 settings, JA3 fingerprints, and other TLS-related settings.

Example: Create a CustomTLSClientConfig instance with specific settings:

>>> import tls_requests
>>> kwargs = {
    "alpnProtocols": [
        "h2",
        "http/1.1"
    ],
    "alpsProtocols": [
        "h2"
    ],
    "certCompressionAlgo": "brotli",
    "connectionFlow": 15663105,
    "h2Settings": {
        "HEADER_TABLE_SIZE": 65536,
        "MAX_CONCURRENT_STREAMS": 1000,
        "INITIAL_WINDOW_SIZE": 6291456,
        "MAX_HEADER_LIST_SIZE": 262144
    },
    "h2SettingsOrder": [
        "HEADER_TABLE_SIZE",
        "MAX_CONCURRENT_STREAMS",
        "INITIAL_WINDOW_SIZE",
        "MAX_HEADER_LIST_SIZE"
    ],
    "headerPriority": null,
    "ja3String": "771,2570-4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,2570-0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-2570-21,2570-29-23-24,0",
    "keyShareCurves": [
        "GREASE",
        "X25519"
    ],
    "priorityFrames": [],
    "pseudoHeaderOrder": [
        ":method",
        ":authority",
        ":scheme",
        ":path"
    ],
    "supportedSignatureAlgorithms": [
        "ECDSAWithP256AndSHA256",
        "PSSWithSHA256",
        "PKCS1WithSHA256",
        "ECDSAWithP384AndSHA384",
        "PSSWithSHA384",
        "PKCS1WithSHA384",
        "PSSWithSHA512",
        "PKCS1WithSHA512"
    ],
    "supportedVersions": [
        "GREASE",
        "1.3",
        "1.2"
    ]
}
>>> custom_tls_client = tls_requests.tls.CustomTLSClientConfig.from_kwargs(**kwargs)
>>> config_obj = tls_requests.tls.TLSConfig(customTlsClient=custom_tls_client, tlsClientIdentifier=None)
>>> config_kwargs = config_obj.to_dict()
>>> r = tls_requests.get("https://httpbin.org/get", **config_kwargs)
>>> r
<Response [200 OK]>

Note

When using CustomTLSClientConfig, the tlsClientIdentifier parameter in TLSConfig is set to None.

Passing Request Parameters Directly

>>> import tls_requests
>>> r = tls_requests.get(
        url = "https://httpbin.org/get",
        proxy = "https://abc:123456@127.0.0.1:8080",
        http2 = True,
        timeout = 10.0,
        follow_redirects = True,
        verify = True,
        tls_identifier = "chrome_120",
        **config,
    )
>>> r
<Response [200 OK]>

Note

When using the customTlsClient parameter within **config, the tls_identifier parameter will not be set. Parameters such as headers, cookies, proxy, timeout, verify, and tls_identifier will override the existing configuration in TLSConfig.

Client and AsyncClient Parameters

>>> import tls_requests
>>> client = tls_requests.Client(
        proxy = "https://abc:123456@127.0.0.1:8080",
        http2 = True,
        timeout = 10.0,
        follow_redirects = True,
        verify = True,
        tls_identifier = "chrome_120",
        **config,
    )
>>> r = client.get(url = "https://httpbin.org/get",)
>>> r
<Response [200 OK]>

Note

The Client and AsyncClient interfaces in tls_requests enable reusable and shared configurations for multiple requests, providing a more convenient and efficient approach for handling HTTP requests.