詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

Go で SOCKS5 プロキシを利用する

検索すると golang - net/httpでSOCKS proxyを扱う - Qiita という記事が見つかったけれど、今なら net/proxy パッケージを使えばよさそうだ。

雑な例だとこんな感じ。

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

func main() {
    p, err := proxy.SOCKS5("tcp", "127.0.0.1:10001", nil, proxy.Direct)

    client := http.DefaultClient
    client.Transport = &http.Transport{
        Dial: p.Dial,
    }

    resp, err := client.Get(...)
}

proxy.SOCKS5() 関数で proxy.Dialer というのが得られるので、これをたとえば http.TransportDial フィールドに渡してやればよい。簡単。

また proxy.FromEnvironment() を使うと環境変数からプロキシの設定を取得できる。この場合以下のように、all_proxy 環境変数をよしなに設定してやる必要がある。

all_proxy=socks5://127.0.0.1:10001 ./main

はてなで一緒に働きませんか?