go 语言写的东西,要访问 xxx.com,后面发现 xxx.com 被墙了,于是尝试
proxychains go run main.go,但是还是不能访问 xxx.com,浏览器
访问就没事,确认代理没有问题,那么问题出在哪里?有懂的大佬吗?

设置 HTTP_PROXY 和 HTTPS_PROXY 环境变量

环境变量或者直接 http client 里面设置 proxy

net 包可以设置 proxy

以前设置过这里,好像别的软件配置就出问题,不敢动这里

看了一下,好像不是很适应,不知道有没有其他的工具 可以强制 go 走代理

用临时的啊,只对你这个命令生效的,你如果用的是 linux 或者 mac ,直接用 export HTTP_PROXY= 127.0.0.1:8080 然后再执行你的 go run 就可以了,这个是只对当前 shell 生效的

好的 我尝试一下

或者直接这样就可以了,只对当前命令有效 HTTP_PROXY= 127.0.0.1:8080 HTTPS_PROXY= q127.0.0.1:8080 go run main.go

linux/mac 运行这个命令:bash -c "export http_proxy= 127.0.0.1:8080 && export https_proxy= 127.0.0.1:8080 && go run main.go"

可以在代码里面初始化的时候设置一下:func init() { os.Setenv("http_proxy", " 127.0.0.1:8080")}

golang http.Client 可以设置 http 代理补充:golang 是静态编译的,proxychains 无效的

HTTP_PROXY 这些变量之所以有效,是因为代码里面读了这个变量、然后 set 自己的 proxy 啊…你现在代码是自己写的,就应该自己实现 HTTP_PROXY ,或者找一个支持的库直接封装了 HTTP_PROXY 的

可以直接使用 surge 或者 clashx pro 的增强模式

graftcp 代替 proxychains

你代码里面请求的时候有个参数使用系统代理,具体可以搜一下,然后配上楼上的环境变量就可以了

这个以前用过,昨天整了一天,忘了怎么用了,尴尬

用 tun 设备或者 iptables 设置透明代理

感觉好多人都被网上“命令行翻墙”的教程误导了,甚至不知道这只是环境变量

楼上就有不少这种脚本小子😂

直接用系统全局代理模式不行?你要访问 xxx.com 的话是不是得用 http 请求,直接把 http 请求设置成走代理?func ProxyHttpDo(method, reqURL, reqData string, header map[string]string) (body []byte, err error) { // 创建代理地址 proxyUrl, err := url.Parse(" 127.0.0.1:7890") if err != nil { panic(err) } // 创建 Transport 对象并将代理地址分配给它的 Proxy 字段 transport := &http.Transport{Proxy: http.ProxyURL(proxyUrl)} // 创建一个 http.Client 对象,并将 Transport 分配给它的 Transport 字段 client := &http.Client{Transport: transport} req, err := http.NewRequest(method, reqURL, strings.NewReader(reqData)) if err != nil { // handle error return nil, err } //req.Header.Set("Content-Type", "application/x-www-form-urlencoded") //req.Header.Set("Cookie", "name=anny") req.Header.Set("Origin", " www.google.com") //授权头信息 req.Header.Set("Referer", " www.google..com/") //授权头信息 if len(header) > 0 { log.Printf("has header--->") for k, v := range header { log.Printf("header[%s]=>[%s]\n", k, v) req.Header.Set(k, v) } } resp, err := client.Do(req) if err != nil { return nil, err } defer resp.Body.Close() body, err = io.ReadAll(resp.Body) log.Printf("body:%s\n", string(body)) if err != nil { // handle error return nil, err } return}