Как связать http.Client в Go с IP-адресом, используя http2.Transport - PullRequest
0 голосов
/ 24 апреля 2020

У меня очень похожий вопрос: Как связать http.Client в Go с IP-адресом

Единственное отличие состоит в том, что я хочу использовать http2. Транспорт.

С http.Transport это работает хорошо:

   localAddr, err := net.ResolveIPAddr("ip", "<my local address>")
   if err != nil {
     panic(err)
   }

   webclient := &http.Client{
     Transport: &http.Transport{
       TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
       DialContext: (&net.Dialer{
          LocalAddr: &net.TCPAddr {
            IP: localAddr.IP,
          },
        }).DialContext,
     },
   }

Как я видел здесь https://go.googlesource.com/net/+/master/http2/transport.go Структура http2.Transport имеет следующие свойства:

type Transport struct {
    DialTLS func(network, addr string, cfg *tls.Config) (net.Conn, error)
    TLSClientConfig *tls.Config
    ConnPool ClientConnPool
    DisableCompression bool
    AllowHTTP bool
    MaxHeaderListSize uint32
    StrictMaxConcurrentStreams bool
    t1 *http.Transport
    connPoolOnce  sync.Once
    connPoolOrDef ClientConnPool // non-nil version of ConnPool
}

Но если я использую http2.Transport со свойством "t1" ...

  localAddr, err := net.ResolveIPAddr("ip", "<my local address>")
  if err != nil {
    panic(err)
  }

  webclient := &http.Client{
    Transport: &http2.Transport{
      TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
      t1 : &http.Transport{
        DialContext: (&net.Dialer{
          LocalAddr: &net.TCPAddr {
            IP: localAddr.IP,
          },
        }).DialContext,
      },
    },
  }

... Я получил ошибку:

unknown field 't1' in struct literal of type http2.Transport

Похоже на свойство ' t1 'не существует в http2.Transport.

Я смотрю на неправильную структуру http2.Transport или есть какие-то проблемы с версиями, или я должен сделать это другим способом?

...