Golang Go语言中的代理:http/socks5 proxy

发布于 1周前 作者 vueper 来自 Go语言

Golang Go语言中的代理:http/socks5 proxy

博客地址:https://www.douyacun.com

http 代理

正确的 http 代理使用姿势

proxy, _ := url.Parse("http://127.0.0.1:1081")
clt := http.Client{
  Timeout: 5 * time.Second,
  Transport: &http.Transport{
    Proxy:           http.ProxyURL(proxy),  // 使用代理请求
    TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // 跳过 https 证书资格验证
  },
}
resp, err := clt.Get(fmt.Sprintf("http://www.google.com/ping?sitemap=%s", sitemapUrl))

go http 提供了 2 个函数:

// 使用环境变量: HTTP_PROXY,HTTPS_PROXY
func ProxyFromEnvironment(req *Request) (*url.URL, error)
// 指定端口
func ProxyURL(fixedURL *url.URL) func(*Request) (*url.URL, error)

Socks5 代理

http 代理直接使用 http 包即可完成,不过 socks5 就得用: golang.org/x/net/proxy

package main

import ( “crypto/tls” “fmt” “golang.org/x/net/proxy” “io/ioutil” “log” “net/http” “time” )

func main() { dialer, err := proxy.SOCKS5(“tcp”, “127.0.0.1:1080”, nil, proxy.Direct) if err != nil { log.Fatalf(“socks5 init err: %s”, err.Error()) return } clt := http.Client{ Timeout: 5 * time.Second, Transport: &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, Dial: dialer.Dial, }, } resp, err := clt.Get(“https://www.google.com”) if err != nil { log.Fatalf(“ping google sitemap err: %s”, err.Error()) return } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { log.Fatalf(“curl google failed~”) return } body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatalf(“google response body read err: %s”, err.Error()) } fmt.Println(string(body)) return }

结果是可以正常返回的,服务器是在北京的。

image-20210103211632721


更多关于Golang Go语言中的代理:http/socks5 proxy的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

我是因为博客接了 Github 登录(京东云,因为便宜)大部分情况都是超时的,当时的做法是租一个阿里云香港的服务器( 25¥),然后 go 写了一套的代理来访问, 只做这一件事情有点奢侈~,毕竟有其他的 ss

更多关于Golang Go语言中的代理:http/socks5 proxy的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中,处理HTTP和SOCKS5代理是一项常见的网络编程任务,尤其是在需要绕过网络限制或访问特定资源时。Go语言标准库和一些第三方库提供了丰富的支持来实现这些功能。

对于HTTP代理,Go的net/http包内置了对代理的支持。你可以通过设置http.ClientTransport字段中的Proxy字段来指定代理。例如,使用http.ProxyURL函数来创建一个代理URL,并将其赋给http.ClientTransport.Proxy字段。这样,当使用这个http.Client发起HTTP请求时,请求会通过指定的HTTP代理发送。

对于SOCKS5代理,Go标准库没有直接支持,但你可以使用第三方库,如github.com/armon/go-socks5github.com/shadowsocks/go-shadowsocks2。这些库提供了SOCKS5代理客户端的实现,你可以将其与自定义的http.Transport结合使用,或者用于其他需要SOCKS5代理的网络连接。

在使用这些代理时,需要注意的是,代理服务器可能会引入额外的延迟和带宽消耗,因此需要根据实际需求合理配置和使用。同时,出于安全考虑,应确保代理服务器的可靠性和安全性,避免敏感信息泄露。

总之,Golang提供了灵活且强大的工具来处理HTTP和SOCKS5代理,无论是通过标准库还是第三方库,都能满足大多数网络编程需求。

回到顶部