>백엔드 개발 >Golang >Golang에서 프록시를 설정하는 방법에 대해 이야기해 보겠습니다.

Golang에서 프록시를 설정하는 방법에 대해 이야기해 보겠습니다.

PHPz
PHPz원래의
2023-04-14 14:42:244543검색

Golang은 빠르고 효율적인 동시 프로그래밍 언어로 현재 가장 인기 있는 프로그래밍 언어 중 하나입니다. 네트워크 프로그래밍을 할 때 제한된 웹사이트에 접근하려면 프록시를 설정해야 할 수도 있습니다. 이번 글에서는 Golang에서 프록시를 설정하는 방법을 알아 보겠습니다.

프록시는 클라이언트와 대상 서버를 연결하는 데 사용되는 중개 서버입니다. 클라이언트가 프록시 서버와 연결을 설정하면 프록시 서버는 클라이언트를 대신하여 대상 서버에 요청을 보냅니다. 대상 서버는 프록시 서버에 응답을 반환하고 프록시 서버는 다시 클라이언트에 응답을 반환합니다. 이러한 방식으로 클라이언트는 다른 방법으로는 액세스할 수 없는 리소스에 대한 액세스 권한을 얻을 수 있습니다.

일반적인 프록시에는 HTTP 프록시와 SOCKS 프록시가 포함됩니다. Golang에서는 환경 변수를 설정하여 프록시를 구성할 수 있습니다. 특히 HTTP_PROXY 및 HTTPS_PROXY 환경 변수 또는 ALL_PROXY 환경 변수를 설정할 수 있습니다(이 시점에서 프록시는 모든 프로토콜에 적용됩니다). 에이전트에 인증이 필요한 경우 에이전트의 사용자 이름과 비밀번호도 설정해야 합니다.

Golang에서 프록시를 설정하는 단계는 다음과 같습니다.

1단계: HTTP 프록시 설정

터미널에서 HTTP 프록시 설정, 예:

export HTTP_PROXY=http://proxy.example.com:8080

프록시 서버가 "proxy.example.com"이고 포트가 포트라고 가정합니다. "8080"입니다.

Golang 프로그램에서 HTTP 프록시를 설정합니다. 예:

package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "http://example.com", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        os.Exit(1)
    }
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error executing request:", err)
        os.Exit(1)
    }
    fmt.Println("Response status:", resp.Status)
}

위 프로그램은 "http://example.com"으로 GET 요청을 보내고 응답 상태를 인쇄합니다. 이 프로그램은 HTTP_PROXY 환경 변수에 지정된 프록시를 사용합니다. HTTP_PROXY 환경 변수를 설정하여 프록시 설정을 변경할 수 있습니다.

2단계: HTTPS 프록시 설정

마찬가지로 HTTPS_PROXY 환경 변수를 설정하여 HTTPS 프록시를 구성할 수 있습니다.

export HTTPS_PROXY=https://proxy.example.com:8080

Golang 프로그램에서 HTTPS 프록시 사용:

package main

import (
    "crypto/tls"
    "fmt"
    "net/http"
    "os"
)

func main() {
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
    client := &http.Client{Transport: tr}
    req, err := http.NewRequest("GET", "https://example.com", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        os.Exit(1)
    }
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error executing request:", err)
        os.Exit(1)
    }
    fmt.Println("Response status:", resp.Status)
}

위 프로그램은 "https://example.com"으로 GET 요청을 보내고 응답 상태를 인쇄합니다. 이 프로그램은 HTTPS_PROXY 환경 변수에 지정된 프록시를 사용합니다. HTTPS_PROXY 환경 변수를 설정하여 프록시 설정을 변경할 수 있습니다. HTTPS 요청의 경우 인증서를 직접 확인할 수 있도록 전송 객체를 생성하고 TLS 클라이언트 구성에 대해 InsecureSkipVerify를 true로 설정해야 합니다.

3단계: SOCKS 프록시 설정

SOCKS 프록시를 사용할 수도 있습니다. SOCKS 프록시는 HTTP 및 HTTPS 프로토콜이 아닌 SOCKS 프로토콜을 기반으로 합니다. 터미널에서 SOCKS 프록시 설정:

export ALL_PROXY=socks5://proxy.example.com:1080

Golang 프로그램에서 SOCKS 프록시 설정:

package main

import (
    "fmt"
    "golang.org/x/net/proxy"
    "net/http"
    "os"
)

func main() {
    dialer, err := proxy.SOCKS5("tcp", "proxy.example.com:1080", nil, proxy.Direct)
    if err != nil {
        fmt.Println("Error setting up SOCKS5 proxy:", err)
        os.Exit(1)
    }
    transport := &http.Transport{Dial: dialer.Dial}
    client := &http.Client{Transport: transport}
    req, err := http.NewRequest("GET", "http://example.com", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        os.Exit(1)
    }
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error executing request:", err)
        os.Exit(1)
    }
    fmt.Println("Response status:", resp.Status)
}

위 프로그램은 "http://example.com"에 GET 요청을 보내고 응답 상태를 인쇄합니다. 이 프로그램은 ALL_PROXY 환경 변수에 지정된 SOCKS 프록시를 사용합니다. ALL_PROXY 환경 변수를 설정하여 모든 프로토콜에 대한 프록시를 구성할 수 있습니다.

요약

HTTP_PROXY, HTTPS_PROXY 및 ALL_PROXY 환경 변수를 설정하여 Golang에서 HTTP, HTTPS 및 SOCKS 프록시를 구성할 수 있습니다. 이는 Golang을 다른 프로그래밍 언어에 비해 네트워크 프로그래밍에 더 유연하게 만듭니다.

위 내용은 Golang에서 프록시를 설정하는 방법에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.