golang程序发送http请求在socks代理下无效的解决方法(Win10)

在使用golang向某些网站发送http请求时,发现它在没有进行设置的情况下并不能直接使用正在运行的socks代理(SSR等)发送数据。起初我认为是终端不走代理的原因…

首先使用Privoxy将socks5代理转化为本地http代理

privoxy下载地址
安装,在运行前确保socks代理开启,找到privoxy安装目录下的config.txt,修改其中如下的内容:

listen-address  127.0.0.1:8118 		(选择一个未被占用的端口即可(默认为8118

在文本末尾添加

forward-socks5 / 127.0.0.1:1080 .	(localhost后的端口为ssr的发送端口,切记最后的 . 也要复制上,表示转发全部)

保存,运行privoxy,在goland中可以进行测试
在这里插入图片描述
随便输入个甚么,提示 C o n n e c t i o n ⋅ s u c c e s s f u l \color{blue}{Connection·successful} Connectionsuccessful后说明这一步大功告成了
在这里插入图片描述

在构建Client时设置通过代理发送http请求

起初我认为只要设置好终端的代理环境即可,没想到还是屡遭timeout或host not found的重创,,,后来在看原码时发现只需要在配置Transport参数时提供Proxy的值即可,样例代码如下:

func NewPixivClient() *PixClient {
	// 生成标准化url
	proxyUrl, err := url.Parse("http://127.0.0.1:8118/")
	if err != nil {panic(err)}
	// 配置transport用于构建http client
	transport := &http.Transport {
		TLSClientConfig: &tls.Config{InsecureSkipVerify: false},
		Dial: func(netw, addr string) (net.Conn, error) {
			deadline := time.Now().Add(60 * time.Second)
			c, err := net.DialTimeout(netw, addr, time.Second*60)
			if err != nil {
				panic(err)
			}
			
			err = c.SetDeadline(deadline)
			return c, err
		},
		ResponseHeaderTimeout: time.Second*60,
		// 进行一次类型转化
		Proxy: http.ProxyURL(proxyUrl),
	}
	return &PixClient {
		clnt:             http.Client{Transport: transport},
		pixLoginResponse: PixLoginResponse{},
	}
}

题外话——关于设置win10的终端代理

在pwsh或者cmd环境下都可以使用:

netsh winhttp set proxy /?

查看说明

用法: set proxy [proxy-server=] [bypass-list=]

不设置过滤地址的情况下直接输入
netsh winhttp set proxy proxy-server="http=http://xxx.xxx.xxx.xxx:x/;https=http://xxx.xxx.xxx.xxx:x/" bypass-list=""
回车即可

之后便可以通过查询命令👇确保正常运行即可

netsh winhttp show proxy
查看代理信息
netstat
查看运行中的连接信息
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值