Spaces:
Running
Running
package bogdanfinn | |
import ( | |
"aurora/httpclient" | |
"io" | |
"net/http" | |
fhttp "github.com/bogdanfinn/fhttp" | |
tls_client "github.com/bogdanfinn/tls-client" | |
"github.com/bogdanfinn/tls-client/profiles" | |
) | |
type TlsClient struct { | |
Client tls_client.HttpClient | |
ReqBefore handler | |
} | |
type handler func(r *fhttp.Request) error | |
func NewStdClient() *TlsClient { | |
client, _ := tls_client.NewHttpClient(tls_client.NewNoopLogger(), []tls_client.HttpClientOption{ | |
tls_client.WithCookieJar(tls_client.NewCookieJar()), | |
tls_client.WithTimeoutSeconds(600), | |
tls_client.WithClientProfile(profiles.Okhttp4Android13), | |
}...) | |
stdClient := &TlsClient{Client: client} | |
return stdClient | |
} | |
func convertResponse(resp *fhttp.Response) *http.Response { | |
response := &http.Response{ | |
Status: resp.Status, | |
StatusCode: resp.StatusCode, | |
Proto: resp.Proto, | |
ProtoMajor: resp.ProtoMajor, | |
ProtoMinor: resp.ProtoMinor, | |
Header: http.Header(resp.Header), | |
Body: resp.Body, | |
ContentLength: resp.ContentLength, | |
TransferEncoding: resp.TransferEncoding, | |
Close: resp.Close, | |
Uncompressed: resp.Uncompressed, | |
Trailer: http.Header(resp.Trailer), | |
} | |
return response | |
} | |
func (t *TlsClient) handleHeaders(req *fhttp.Request, headers httpclient.AuroraHeaders) { | |
if headers == nil { | |
return | |
} | |
for k, v := range headers { | |
req.Header.Set(k, v) | |
} | |
} | |
func (t *TlsClient) handleCookies(req *fhttp.Request, cookies []*http.Cookie) { | |
if cookies == nil { | |
return | |
} | |
for _, c := range cookies { | |
req.AddCookie(&fhttp.Cookie{ | |
Name: c.Name, | |
Value: c.Value, | |
Path: c.Path, | |
Domain: c.Domain, | |
Expires: c.Expires, | |
RawExpires: c.RawExpires, | |
MaxAge: c.MaxAge, | |
Secure: c.Secure, | |
HttpOnly: c.HttpOnly, | |
SameSite: fhttp.SameSite(c.SameSite), | |
Raw: c.Raw, | |
Unparsed: c.Unparsed, | |
}) | |
} | |
} | |
func (t *TlsClient) Request(method httpclient.HttpMethod, url string, headers httpclient.AuroraHeaders, cookies []*http.Cookie, body io.Reader) (*http.Response, error) { | |
req, err := fhttp.NewRequest(string(method), url, body) | |
if err != nil { | |
return nil, err | |
} | |
t.handleHeaders(req, headers) | |
t.handleCookies(req, cookies) | |
if t.ReqBefore != nil { | |
if err := t.ReqBefore(req); err != nil { | |
return nil, err | |
} | |
} | |
do, err := t.Client.Do(req) | |
if err != nil { | |
return nil, err | |
} | |
return convertResponse(do), nil | |
} | |
func (t *TlsClient) SetProxy(url string) error { | |
return t.Client.SetProxy(url) | |
} | |