1
harmless 2023-10-22 10:35:10 +08:00 via iPhone
设置 HTTP_PROXY 和 HTTPS_PROXY 环境变量
|
2
knightdf 2023-10-22 10:36:58 +08:00
环境变量或者直接 http client 里面设置 proxy
|
3
seers 2023-10-22 10:37:33 +08:00 via Android
net 包可以设置 proxy
|
6
harmless 2023-10-22 10:45:12 +08:00 via iPhone
@itakeman 用临时的啊,只对你这个命令生效的,你如果用的是 linux 或者 mac ,直接用 export HTTP_PROXY=http://127.0.0.1:8080 然后再执行你的 go run 就可以了,这个是只对当前 shell 生效的
|
8
harmless 2023-10-22 10:48:44 +08:00 via iPhone
或者直接这样就可以了,只对当前命令有效 HTTP_PROXY=http://127.0.0.1:8080 HTTPS_PROXY=http://q127.0.0.1:8080 go run main.go
|
9
yinmin 2023-10-22 11:02:31 +08:00
@itakeman linux/mac 运行这个命令:
bash -c "export http_proxy=http://127.0.0.1:8080 && export https_proxy=http://127.0.0.1:8080 && go run main.go" |
10
yougg 2023-10-22 11:28:22 +08:00 via Android
可以在代码里面初始化的时候设置一下:
func init() { os.Setenv("http_proxy", "http://127.0.0.1:8080") } |
11
yaott2020 2023-10-22 11:54:57 +08:00 via Android 1
golang http.Client 可以设置 http 代理
补充:golang 是静态编译的,proxychains 无效的 |
12
lance6716 2023-10-22 13:37:51 +08:00 via Android
HTTP_PROXY 这些变量之所以有效,是因为代码里面读了这个变量、然后 set 自己的 proxy 啊…你现在代码是自己写的,就应该自己实现 HTTP_PROXY ,或者找一个支持的库直接封装了 HTTP_PROXY 的
|
13
upupqi 2023-10-22 14:14:11 +08:00
可以直接使用 surge 或者 clashx pro 的增强模式
|
14
wishyy 2023-10-22 14:17:20 +08:00
graftcp 代替 proxychains
|
15
emailzzjcool 2023-10-22 14:46:39 +08:00 via iPhone
你代码里面请求的时候有个参数使用系统代理,具体可以搜一下,然后配上楼上的环境变量就可以了
|
17
xiaohusky 2023-10-22 21:44:06 +08:00
用 tun 设备或者 iptables 设置透明代理
|
20
jioswu 2023-10-23 09:36:26 +08:00
直接用系统全局代理模式不行?你要访问 xxx.com 的话是不是得用 http 请求,直接把 http 请求设置成走代理?
func ProxyHttpDo(method, reqURL, reqData string, header map[string]string) (body []byte, err error) { // 创建代理地址 proxyUrl, err := url.Parse("http://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", "https://www.google.com") //授权头信息 req.Header.Set("Referer", "https://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 } |
21
iSecret 2023-10-23 14:49:04 +08:00
net/http 默认会读取到环境 HTTP_PROXY 时自动配置,如果你使用了其他客户端,需要手动处理设置 HTTP_PROXY 的逻辑。
|
22
dyllen 2023-10-30 15:38:04 +08:00
这个我搞过,默认是读取系统环境变量,1 楼说的那样。
也可以自己代码里设置,设置 transport 的 proxy 属性: Transport.(*http.Transport).Proxy = xxx xxx 是一个函数,返回代理地址就可以了,支持 http ,https ,socks5 代理: Proxy func(*Request) (*url.URL, error) |
23
dyllen 2023-10-30 15:39:41 +08:00
修改默认 http client 的代理设置:
http.DefaultTransport.(*http.Transport).Proxy = xxx |