| 12345678910111213141516171819202122232425262728293031323334 |
- 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
- }
|