golang中如何使用http,socket5代理
本文内容纲要:
-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,"can'tconnecttotheproxy:",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