bogdanfinn / tls-client

net/http.Client like HTTP Client with options to select specific client TLS Fingerprints to use for requests.
BSD 4-Clause "Original" or "Old" License
859 stars 164 forks source link

panic: tls: LoadSessionCoordinator.onEnterLoadSessionCheck failed: session is set and locked, no call to loadSession is allowed #96

Open rdelcampog opened 11 months ago

rdelcampog commented 11 months ago

TLS client version

v1.7.2

System information

-

Issue description

Requests to a specific domain end in a panic and the program exits.

Steps to reproduce / Code Sample

Using the Quick Usage Example:

package main

import (
    "fmt"
    "io"
    "log"

    http "github.com/bogdanfinn/fhttp"
    tls_client "github.com/bogdanfinn/tls-client"
    "github.com/bogdanfinn/tls-client/profiles"
)

func main() {
    jar := tls_client.NewCookieJar()
    options := []tls_client.HttpClientOption{
        tls_client.WithTimeoutSeconds(30),
        tls_client.WithClientProfile(profiles.Chrome_105),
        tls_client.WithNotFollowRedirects(),
        tls_client.WithCookieJar(jar), // create cookieJar instance and pass it as argument
    }

    client, err := tls_client.NewHttpClient(tls_client.NewNoopLogger(), options...)
    if err != nil {
        log.Println(err)
        return
    }

    req, err := http.NewRequest(http.MethodGet, "https://18005717441.com", nil)
    if err != nil {
        log.Println(err)
        return
    }

    req.Header = http.Header{
        "accept":                    {"*/*"},
        "accept-language":           {"de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"},
        "user-agent":                {"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"},
        http.HeaderOrderKey: {
            "accept",
            "accept-language",
            "user-agent",
        },
    }

    resp, err := client.Do(req)
    if err != nil {
        log.Println(err)
        return
    }

    defer resp.Body.Close()

    log.Println(fmt.Sprintf("status code: %d", resp.StatusCode))

    readBytes, err := io.ReadAll(resp.Body)
    if err != nil {
        log.Println(err)
        return
    }

    log.Println(string(readBytes))
}

Targetting the URL: https://18005717441.com with:

Switching profile to:

bogdanfinn commented 7 months ago

@rdelcampog thank you for reporting this. may i ask what is the expected behavior here? i mean i can't access the site with my browser. Do you want to client to not panic but throw an error similar like when using a chrome profile?