Untitled
golang
a month ago
4.1 kB
1
Indexable
Never
// TLS CONFIGURATIONS jar := tls_client.NewCookieJar() // HARDCODED settings := map[http2.SettingID]uint32{ http2.SettingHeaderTableSize: 65536, http2.SettingMaxConcurrentStreams: 1000, http2.SettingInitialWindowSize: 6291456, http2.SettingMaxHeaderListSize: 262144, http2.SettingEnablePush: 0, } // HARDCODED settingsOrder := []http2.SettingID{ http2.SettingHeaderTableSize, http2.SettingEnablePush, http2.SettingMaxConcurrentStreams, http2.SettingInitialWindowSize, http2.SettingMaxHeaderListSize, } // HARDCODED pseudoHeaderOrder := []string{ ":method", ":authority", ":scheme", ":path", } // HARDCODED connectionFlow := uint32(15663105) suites := []uint16{ tls.TLS_AES_128_GCM_SHA256, tls.TLS_AES_128_GCM_SHA256, tls.TLS_AES_256_GCM_SHA384, tls.TLS_CHACHA20_POLY1305_SHA256, tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, tls.TLS_RSA_WITH_AES_128_GCM_SHA256, tls.TLS_RSA_WITH_AES_256_GCM_SHA384, tls.TLS_RSA_WITH_AES_128_CBC_SHA, tls.TLS_RSA_WITH_AES_256_CBC_SHA, } shuffledSuites := shuffleSuites(suites) // HARDCODED FROM THE BROWSER. specFactory := func() (tls.ClientHelloSpec, error) { return tls.ClientHelloSpec{ CipherSuites: append([]uint16{tls.GREASE_PLACEHOLDER}, shuffledSuites...), CompressionMethods: []uint8{ tls.CompressionNone, }, Extensions: []tls.TLSExtension{ &tls.UtlsGREASEExtension{}, &tls.SNIExtension{}, &tls.UtlsExtendedMasterSecretExtension{}, &tls.RenegotiationInfoExtension{Renegotiation: tls.RenegotiateOnceAsClient}, &tls.SupportedCurvesExtension{Curves: []tls.CurveID{ tls.CurveID(tls.GREASE_PLACEHOLDER), tls.X25519, tls.CurveP256, tls.CurveP384, }}, &tls.SupportedPointsExtension{SupportedPoints: []byte{ 0, }}, &tls.SessionTicketExtension{}, &tls.ALPNExtension{AlpnProtocols: []string{"h2", "http/1.1"}}, &tls.StatusRequestExtension{}, &tls.SignatureAlgorithmsExtension{SupportedSignatureAlgorithms: []tls.SignatureScheme{ tls.ECDSAWithP256AndSHA256, tls.PSSWithSHA256, tls.PKCS1WithSHA256, tls.ECDSAWithP384AndSHA384, tls.PSSWithSHA384, tls.PKCS1WithSHA384, tls.PSSWithSHA512, tls.PKCS1WithSHA512, }}, &tls.SCTExtension{}, &tls.KeyShareExtension{KeyShares: []tls.KeyShare{ {Group: tls.CurveID(tls.GREASE_PLACEHOLDER), Data: []byte{0}}, {Group: tls.X25519}, }}, &tls.PSKKeyExchangeModesExtension{Modes: []uint8{ tls.PskModeDHE, }}, &tls.SupportedVersionsExtension{Versions: []uint16{ tls.GREASE_PLACEHOLDER, tls.VersionTLS13, tls.VersionTLS12, }}, &tls.UtlsCompressCertExtension{Algorithms: []tls.CertCompressionAlgo{ tls.CertCompressionBrotli, }}, &tls.ApplicationSettingsExtension{SupportedProtocols: []string{"h2"}}, &tls.UtlsGREASEExtension{}, &tls.UtlsPaddingExtension{GetPaddingLen: tls.BoringPaddingStyle}, }, }, nil } customClientProfile := tls_client.NewClientProfile(tls.ClientHelloID{ Client: "MyCustomProfile", Version: "1", Seed: nil, SpecFactory: specFactory, }, settings, settingsOrder, pseudoHeaderOrder, connectionFlow, nil, nil) options := []tls_client.HttpClientOption{ tls_client.WithTimeoutSeconds(1600), tls_client.WithClientProfile(customClientProfile), // use custom profile here tls_client.WithProxyUrl(proxy), tls_client.WithCookieJar(jar), tls_client.WithForceHttp1(), } client, err := tls_client.NewHttpClient(tls_client.NewNoopLogger(), options...) if err != nil { log.Println(err) return }