Danny-Dasilva / CycleTLS

Spoof TLS/JA3 fingerprints in GO and Javascript
GNU General Public License v3.0
823 stars 163 forks source link

RoundTripper does not implement "net/http".RoundTripper #305

Closed Deekit0904 closed 4 months ago

Deekit0904 commented 6 months ago

Description

package main

import (
    "fmt"
    "github.com/Danny-Dasilva/CycleTLS/cycletls"
    "net/http"
)

func main() {

    newTransaport := cycletls.NewTransport("772,4865-4867-4866-49195-49199-52393-52392-49196-49200-49162-49161-49171-49172-156-157-47-53,0-23-65281-10-11-16-5-34-51-43-13-28-65037,29-23-24-25-256-257,0", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0")

    client := http.Client{
        Transport: newTransaport,
    }
    header := http.Header{}

    header.Add("accept-encoding", "gzip")
    header.Add("sec-ch-ua", "\"Chromium\";v=\"110\", \"Not A(Brand\";v=\"24\", \"Microsoft Edge\";v=\"110\"")
    header.Add("sec-ch-ua-mobile", "?0")
    header.Add("sec-ch-ua-platform", "Windows")
    header.Add("upgrade-insecure-requests", "1")
    header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1660.14")
    header.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7")
    header.Add("sec-fetch-site", "none")
    header.Add("sec-fetch-mode", "navigate")
    header.Add("sec-fetch-user", "?1")
    header.Add("sec-fetch-dest", "document")
    header.Add("accept-language", "en-US,en;q=0.5")

    req, err := http.NewRequest("GET", "https://google.com/", nil)
    if err != nil {
        fmt.Println("Error creating HTTP request:", err)
        return
    }
    req.Header = header

    resp, err := client.Do(req)

    if err != nil {
        fmt.Println("Error sending HTTP request:", err)
        return
    }

    fmt.Println("Response status code:", resp.StatusCode)
}

Using this code to create transport with cycleTls and use httpClient to send a request

But it's seem to error due to

cannot use newTransaport (variable of type "github.com/Danny-Dasilva/fhttp".RoundTripper) as "net/http".RoundTripper value in struct literal: "github.com/Danny-Dasilva/fhttp".RoundTripper does not implement "net/http".RoundTripper (wrong type for method RoundTrip)
                have RoundTrip(*"github.com/Danny-Dasilva/fhttp".Request) (*"github.com/Danny-Dasilva/fhttp".Response, error)
                want RoundTrip(*"net/http".Request) (*"net/http".Response, error)

Issue Type

Bug, Support

Operating System

Mac OS

Node Version

None

Golang Version

Other

Relevant Log Output

No response

expectopotatum commented 5 months ago

@Deekit0904 you should replace your imports with

import (
    "fmt"
    "github.com/Danny-Dasilva/CycleTLS/cycletls"
    http "github.com/Danny-Dasilva/fhttp"
)
Danny-Dasilva commented 4 months ago

fhttp is used here to set SETTINGS, WINDOW_UPDATE & PRIORITY frames on the connection to get a proper akamai hash. It should be a drop in replacement for net/http other than those changes. Feel free to re-open if you have any questions