"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go HTTP 클라이언트를 특정 IP 주소에 어떻게 바인딩할 수 있나요?

Go HTTP 클라이언트를 특정 IP 주소에 어떻게 바인딩할 수 있나요?

2024년 11월 10일에 게시됨
검색:886

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

Go에서 http.Client를 IP 주소에 바인딩

분산 컴퓨팅 영역에서는 소스 IP를 제어해야 하는 경우가 많습니다. HTTP 요청이 시작되는 주소입니다. 클라이언트 시스템에 여러 NIC가 있는 경우 이러한 세분성이 필수적일 수 있습니다.

다음 기본 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()
}

이 클라이언트를 특정 NIC 또는 IP 주소에 바인딩하려면 전송 필드를 수정해야 합니다. 우리는 사용자 정의 net.Dialer를 사용하는 사용자 정의 net.Transport를 사용할 것입니다. 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 주소에 바인딩되어 모든 나가는 요청이 원하는 NIC에서 시작되도록 보장합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3