検索すると 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.Transport
の Dial
フィールドに渡してやればよい。簡単。
また proxy.FromEnvironment()
を使うと環境変数からプロキシの設定を取得できる。この場合以下のように、all_proxy
環境変数をよしなに設定してやる必要がある。
all_proxy=socks5://127.0.0.1:10001 ./main