首页 文章资讯内容详情

golang中如何使用http,socket5代理

2026-06-01 2 花语

本文内容纲要:

-GolangHttpusesocket5proxy

GolangHttpusesocket5proxy

因为最近想爬取一些网站上的视频,无奈网站在墙外,只能通过代理进行爬取,因此在网上搜索关于golang使用代理的方法。

功夫不负有心人,最后我搜到了两张配置方法,趁着现在有空将它们总结一下。

Http和Socket代理经常FQ的梯子户经常用到,但是有些可能不怎么知道他们的区别。估计大家已经从它们的名字中看出了区别,http给人的第一感觉就是http协议嘛,也就是在浏览器中经常用到的,比如大家上网时输入的网址:http://www.google.comhttps://www.google.com等等,其实http代理主要的功能就是代理里客户机(用户计算机)进行http访问,代理浏览器进行网页的访问。而socket代理给人的第一印象则是socket套接字,没错socket代理在代理转发过程中,只是简单的传送数据包,不关心这些数据包是干嘛的是是属于什么协议什么应用的,正是因此socket代理的速度一般来说比http代理的速度快很多(因为人家不那么多事嘛,专心做好本职工作而已)。socket代理又分为socket4和sockt5代理,其中socket4只能支持TCP协议,而socket5则同时支持TCP协议和UDP协议。

第一种方法:HTTP(S)代理

废话少扯,直接上代码

packagemain import( "fmt" "io/ioutil" "log" "net/http" "net/url" ) funcmain(){ urli:=url.URL{} urlproxy,_:=urli.Parse("https://127.0.0.1:9743") c:=http.Client{ Transport:&http.Transport{ Proxy:http.ProxyURL(urlproxy), }, } ifresp,err:=c.Get("https://www.google.com");err!=nil{ log.Fatalln(err) }else{ deferresp.Body.Close() body,_:=ioutil.ReadAll(resp.Body) fmt.Printf("%s\n",body) } }

上面这种方法是通过在建立http.Client对象时指定代理地址,其实除了这么一种方式外,还有一种就是通过环境变量来指定代理。代码如下

packagemain import( "fmt" "io/ioutil" "log" "net/http" "os" ) funcmain(){ //urli:=url.URL{} //urlproxy,_:=urli.Parse("https://127.0.0.1:9743") os.Setenv("HTTP_PROXY","http://127.0.0.1:9743") os.Setenv("HTTPS_PROXY","https://127.0.0.1:9743") c:=http.Client{ //Transport:&http.Transport{ // Proxy:http.ProxyURL(urlproxy), //}, } ifresp,err:=c.Get("https://www.google.com");err!=nil{ log.Fatalln(err) }else{ deferresp.Body.Close() body,_:=ioutil.ReadAll(resp.Body) fmt.Printf("%s\n",body) } }

这个方法是通过设置环境变量,go会自动配置代理。

第二种方法:Socket5代理 packagemain import( "fmt" "io/ioutil" "log" "net/http" "os" "golang.org/x/net/proxy" ) funcmain(){ //createasocks5dialer dialer,err:=proxy.SOCKS5("tcp","127.0.0.1:9742",nil,proxy.Direct) iferr!=nil{ fmt.Fprintln(os.Stderr,"cantconnecttotheproxy:",err) os.Exit(1) } //setupahttpclient httpTransport:=&http.Transport{} httpClient:=&http.Client{Transport:httpTransport} //setoursocks5asthedialer httpTransport.Dial=dialer.Dial ifresp,err:=httpClient.Get("https://www.google.com");err!=nil{ log.Fatalln(err) }else{ deferresp.Body.Close() body,_:=ioutil.ReadAll(resp.Body) fmt.Printf("%s\n",body) } }

通过这两种方法可以实现轻松爬梯。

本文内容总结:GolangHttpusesocket5proxy,

原文链接:https://www.cnblogs.com/WingPig/p/5929138.html