mirror of https://github.com/XTLS/Xray-core
35 lines
842 B
Go
35 lines
842 B
Go
package http
|
|
|
|
import (
|
|
"context"
|
|
gohttp "net/http"
|
|
|
|
"github.com/xtls/xray-core/common/net"
|
|
"github.com/xtls/xray-core/transport/internet"
|
|
)
|
|
|
|
// NewClient creates an HTTP client with with internal dialer and using the given sockopt.
|
|
// sockopt can only have one or empty.
|
|
func NewClient(sockopt ...*internet.SocketConfig) *gohttp.Client {
|
|
var Sockopt *internet.SocketConfig
|
|
switch len(sockopt) {
|
|
case 0:
|
|
case 1:
|
|
Sockopt = sockopt[0]
|
|
default:
|
|
panic("sockopt can only be nil or have one")
|
|
}
|
|
httpClient := &gohttp.Client{
|
|
Transport: &gohttp.Transport{
|
|
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
|
|
dest, err := net.ParseDestination(network + ":" + addr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return internet.DialSystem(ctx, dest, Sockopt)
|
|
},
|
|
},
|
|
}
|
|
return httpClient
|
|
}
|