# ja3-client **Repository Path**: chuchur/ja3-client ## Basic Information - **Project Name**: ja3-client - **Description**: Fixes issues like “Just a moment” or HTTP 429 in your project. Provides stable, high-performance handling for up to 10 million concurrent requests. Safe, efficient, and easy to integrate. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-12 - **Last Updated**: 2025-10-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🔥🔥🔥 ja3-client ## 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 ```bash golang ^v1.21x ``` ## Installation ```bash 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 ```go 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 ```go 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 ```go 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](https://github.com/lexiforest/curl_cffi), [REQ](https://github.com/imroc/req) etc. multple ips