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

Как ограничить IP-адрес HTTP-клиента Go при наличии нескольких сетевых карт?

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

How do I constrain the IP address of Go\'s HTTP client when multiple NICs are present?

Как ограничить IP-адрес HTTP-клиента

http.Client Go обеспечивает эффективные HTTP-запросы, но как ограничить его IP-адрес, если ваш в системе имеется несколько сетевых карт?

Настройка привязки IP

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

Пример кода

В приведенном ниже фрагменте кода показано, как привязать клиента к указанному локальный IP-адрес:

import (
    "net"
    "net/http"
    "net/http/httputil"
    "time"
)

func main() {
    // Resolve the local IP address
    localAddr, err := net.ResolveIPAddr("ip", "")
    if err != nil {
        panic(err)
    }

    // Create a TCPAddr instance to specify the local address without specifying a port
    localTCPAddr := net.TCPAddr{
        IP: localAddr.IP,
    }

    // Create an HTTP client with a custom transport that specifies the local address
    webclient := &http.Client{
        Transport: &http.Transport{
            Proxy:                 http.ProxyFromEnvironment,
            DialContext:          (&net.Dialer{
                LocalAddr:      &localTCPAddr,
                Timeout:       30 * time.Second,
                KeepAlive:     30 * time.Second,
                DualStack:     true,
            }).DialContext,
            MaxIdleConns:          100,
            IdleConnTimeout:       90 * time.Second,
            TLSHandshakeTimeout:   10 * time.Second,
            ExpectContinueTimeout: 1 * time.Second,
        },
    }

    // Execute an HTTP request using the customized client
    req, _ := http.NewRequest("GET", "http://www.google.com", nil)
    resp, _ := webclient.Do(req)
    defer resp.Body.Close()
    
    // Optionally, use httputil to get the status code and response body
    code, _ := httputil.DumpResponse(resp, true)
    fmt.Println(code)
}

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

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

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

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

Copyright© 2022 湘ICP备2022001581号-3