我们在软件开发的过程中,会遇到很多需要代理的地方,比如抓包,了解HTTP内容的传输,比如Nginx反向代理等。
以前在Linux下的时候,会安装一个Privoxy把Socket代理转换为HTTP代理,开机启动,也比较方便。但是Mac下使用Brew安装的Privoxy就很难用,所以想试试一个软件搞定Socket和HTTP代理,这样就不用安装一个单独的软件做转换了。
想着就开始做吧,以前基本上没有搞过太多的网络编程,最近也正好在研究Go,正好练练手。
我们这里主要讲使用HTTP/1.1协议中的CONNECT方法建立起来的隧道连接,实现的HTTP Proxy。这种代理的好处就是不用知道客户端请求的数据,只需要原封不动的转发就可以了,对于处理HTTPS的请求就非常方便了,不用解析他的内容,就可以实现代理。
启动代理监听
要想做一个HTTP Proxy,我们需要启动一个服务器,监听一个端口,用于接收客户端的请求。Golang给我们提供了强大的net包供我们使用,我们启动一个代理服务器监听非常方便。
l, err := net.Listen("tcp", ":8080") if err != nil {
log.Panic(err)
}
以上代理我们就实现了一个在8080端口上监听的服务器,我们这里没有写ip地址,默认在所有ip地址上进行监听。如果你只想本机适用,可以使用127.0.0.1:8080,这样机器就访问不了你的代理服务器了。
监听接收代理请求
启动了代理服务器,就可以开始接受不了代理请求了,有了请求,我们才能做进一步的处理。
for {
client, err := l.Accept() if err != nil {
log.Panic(err)
} go handleClientRe