«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу привязать HTTP-клиент Go к определенному IP-адресу?

Как я могу привязать HTTP-клиент Go к определенному IP-адресу?

Опубликовано 10 ноября 2024 г.
Просматривать:403

How Can I Bind a Go HTTP Client to a Specific IP Address?

Привязка http.Client к IP-адресу в Go

В сфере распределенных вычислений часто необходимо контролировать исходный IP-адрес адрес, с которого исходят HTTP-запросы. При наличии нескольких сетевых карт на клиентском компьютере такая детализация может оказаться существенной.

Рассмотрим следующий базовый клиентский код HTTP:

package main

import "net/http"

func main() {
    webclient := &http.Client{}
    req, _ := http.NewRequest("GET", "http://www.google.com", nil)
    httpResponse, _ := webclient.Do(req)
    defer httpResponse.Body.Close()
}

Чтобы привязать этого клиента к определенному сетевому адаптеру или IP-адресу, нам нужно изменить его поле Transport. Мы будем использовать собственный net.Transport, который использует собственный net.Dialer. net.Dialer, в свою очередь, позволяет нам указать локальный адрес для исходящих соединений.

import (
    "net"
    "net/http"
)

func main() {
    localAddr, err := net.ResolveIPAddr("ip", "")
    if err != nil {
        panic(err)
    }
    localTCPAddr := net.TCPAddr{
        IP: localAddr.IP,
    }

    webclient := &http.Client{
        Transport: &http.Transport{
            Proxy:                http.ProxyFromEnvironment,
            DialContext:          (&net.Dialer{LocalAddr: &localTCPAddr}).DialContext,
            MaxIdleConns:          100,
            IdleConnTimeout:       90 * time.Second,
            TLSHandshakeTimeout:   10 * time.Second,
            ExpectContinueTimeout: 1 * time.Second,
        },
    }
}

Благодаря этой модификации наш HTTP-клиент теперь привязан к указанному IP-адресу, гарантируя, что все исходящие запросы исходят от нужного сетевого адаптера.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3