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.