TLS Client Bypass Cloudflare

邱秋 • 2025年11月02日 • 阅读:9 • go

🔥🔥🔥 ja3-client

Source Code

Why

If you're having trouble with the fucking “just a moment” or fucking http status code 429 in your project, you might want to try using this. It may help you . Demonstrates good performance with 10 million concurrent requests. It is safe to use.

Features

  • Proxy support : HTTP ,HTTPS , Socks4 , Socks5, Socks5h
  • Custom headers
  • Custom JA3 string
  • Custom H2 settings
  • Random TLS extension order
  • Custom TLS extension order
  • Custom connection flow
  • Custom header order
  • Custom client identifier (Chrome, Firefox, Opera, Safari, iOS, iPadOS, Android, Tor, Brave ,360 ,QQ ,UC...)
  • Supported Http3 protocols

Supported browsers

The following browsers can be impersonated.

Browser Version
Chrome chrome_140,chrome_139, chrome_138, chrome_137, chrome_137, chrome_136, chrome_135, chrome_134, chrome_133, chrome_132, chrome_131_android, chrome_99_android, chrome_131, chrome_130, chrome_129, chrome_128, chrome_127, chrome_126, chrome_125, chrome_124, chrome_123, chrome_122, chrome_121, chrome_120, chrome_119, chrome_117
Firefox firefox_142, firefox_141, firefox_140, firefox_139, firefox_138, firefox_137, firefox_136, firefox_135, firefox_134, firefox_133, firefox_132, firefox_123, firefox_120, firefox_117
Safari Mac safari_15_3 , safari_15_5 , safari_17_0 , safari_18_0 , safari_18_1 , safari_18_5 , safari_26_0 ,
Safari IOS safari_ios_17_0, safari_ios_18_0, safari_ios_18_5, safari_ios_26_0
Edge edge_140,edge_139, edge_138, edge_137, edge_136, edge_135, edge_134, edge_133, edge_132, edge_131, edge_101
Opera opera_120, opera_119, opera_117
360 qh360_16_0
UC uc_17_9
Xiaomi xiaomi_15_9
Samsung samsung_27_1
Tor tor_14_5
Brave brave_1_8

Dependencies

golang ^v1.21x

Installation

go get github.com/smallerqiu/ja3-client

Usage

Basic Usage

default impersonate chrome 138 , but you can set you customized ja3 string or others browser and version

package main

import (
 "io"
 "log"

 tls "github.com/smallerqiu/ja3-client"
)

func main() {
  // support Get,Post,Delete,Put
 response, err := tls.Get("https://tls.browserleaks.com/json",nil)

 if err != nil {
  log.Printf("Error response: %v", err)
 }

 defer response.Body.Close()

 bytes, err := io.ReadAll(response.Body)

 if err != nil {
  log.Printf("Error response: %v", err)
 }

 log.Printf("Response: %s", string(bytes))

 log.Printf("%v,%s: %s", response.StatusCode)
}

Custom ja3 string

use custom ja3 string do http request . If you're going to use a customized JA3 , you'd better know the browser type. Or you can just use the Custom Client

package main

import (
 "io"
 "log"

 tls "github.com/smallerqiu/ja3-client"
)

func main() {
 reqBody := &tls.Ja3Request{
  Method: "GET",
  URL: "https://www.google.com",
  // Proxy: "http://127.0.0.1:7890", // optional
  // Headers: make(map[string][]string), // optional , your custom headers
  Ja3: "771,4867-4865-4866-52393-52392-49195-49199-49196-49200-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21,29-23-24,0",
  // Akamai: "1:65535;2:0;4:5840;6:262144|15663105|0|m,a,s,p" // Optional, if you want to use akamai to keep http2 fingerprint more accurate.
  // RandomExtensionOrder: true, // Optional , if is true, the extension order will be randomized
 }

 var response, err := tls.DoRequest(reqBody)

 if err != nil {
  log.Printf("Client Error: %v", err)
 }

 defer response.Body.Close()

 bytes, err := io.ReadAll(response.Body)

 if err != nil {
  log.Printf("Error response: %v", err)
 }

 log.Printf("Response: %s", string(bytes))

 log.Printf("%v,%s: %s", response.StatusCode, reqBody.Method, reqBody.URL)
}

Custom Client

package main

import (
 "io"
 "log"

 tls "github.com/smallerqiu/ja3-client"
)

func main() {
 reqBody := &tls.Ja3Request{
  Method:"GET",
  URL:"https://tls.browserleaks.com/json",
  // Proxy:"http://127.0.0.1:7890", // optional
  // Headers:make(map[string][]string), //optional
  Impersonate:"chrome_136",
  // RandomExtensionOrder: true, //optional , if is true, the order of extensions will be randomized
 }

 var response, err := tls.DoRequest(reqBody)

 if err != nil {
  log.Printf("Client Error: %v", err)
 }

 defer response.Body.Close()

 bytes, err := io.ReadAll(response.Body)

 if err != nil {
  log.Printf("Error response: %v", err)
 }

 log.Printf("Response: %s", string(bytes))

 log.Printf("%v,%s: %s", response.StatusCode, reqBody.Method, reqBody.URL)
}

Options

Name Description Type Default Optional example
Method request type string - No GET, POST ,PUT, DELETE
URL request url http.Header - No https://example.com
Body request body []byte - Yes b'{"a": 1}'
Proxy request proxy url string - Yes http://198.168.1.55:7890
SourceIP if your server has multiple IPs,you can decide on one of them as the source IP. string - Yes 193.189.xx.xx
Impersonate which type of browser to impersonate string chrome_138 Yes chrome_137
Ja3 customized ja3 key string - Yes 771,867-4865-....
Akamai customized akamai key string chrome's akamai Yes 1:65535;2:0;4:...
Timeout the timeout for the request. int 30(s) Yes 60
ClientData if you want to customized a browser's fingerprint, you can set this options *ClientData - Yes ....

Of course, you can also look at other projects, such as curl_cffi, REQ etc.

multple ips

我,秦始皇,打钱!

相关文章

禅境花园小程序

关注前沿技术开发.