ホームページ  >  記事  >  バックエンド開発  >  Golang でプロキシを設定する方法について話しましょう

Golang でプロキシを設定する方法について話しましょう

PHPz
PHPzオリジナル
2023-04-14 14:42:244459ブラウズ

Golang は、高速かつ効率的で同時実行可能なプログラミング言語であり、現在最も人気のあるプログラミング言語の 1 つです。ネットワーク プログラミングを行う場合、制限された Web サイトにアクセスするためにプロキシを設定する必要がある場合があります。この記事では、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)
}

上記のプログラムは、GET リクエストを「http://example.com」に送信し、応答ステータスを出力します。このプログラムは、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)
}

上記のプログラムは、GET リクエストを「https://example.com」に送信し、応答ステータスを出力します。このプログラムは、HTTPS_PROXY 環境変数で指定されたプロキシを使用します。 HTTPS_PROXY 環境変数を設定することで、プロキシの設定を変更できます。 HTTPS リクエストの場合は、証明書を自分で検証できるように、Transport オブジェクトを作成し、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)
}

上記のプログラムは、GET リクエストを「http://example.com」に送信し、応答ステータスを出力します。このプログラムは、ALL_PROXY 環境変数で指定された SOCKS プロキシを使用します。 ALL_PROXY 環境変数を設定すると、すべてのプロトコルのプロキシを構成できます。

概要

Golang で HTTP_PROXY、HTTPS_PROXY、および ALL_PROXY 環境変数を設定することで、HTTP、HTTPS、および SOCKS プロキシを構成できます。これにより、Golang は他のプログラミング言語に比べてネットワーク プログラミングをより柔軟に行うことができます。

以上がGolang でプロキシを設定する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。