golang中如何使用http,socket5代理
Golang Http use socket5 proxy
因为最近想爬取一些网站上的视频,无奈网站在墙外,只能通过代理进行爬取,因此在网上搜索关于golang使用代理的方法。
功夫不负有心人,最后我搜到了两张配置方法,趁着现在有空将它们总结一下。
Http和Socket代理经常FQ的梯子户经常用到,但是有些可能不怎么知道他们的区别。估计大家已经从它们的名字中看出了区别,http给人的第一感觉就是http协议嘛,也就是在浏览器中经常用到的,比如大家上网时输入的网址:http://www.google.com https://www.google.com等等,其实http代理主要的功能就是代理里客户机(用户计算机)进行http访问,代理浏览器进行网页的访问。而socket代理给人的第一印象则是socket套接字,没错socket代理在代理转发过程中,只是简单的传送数据包,不关心这些数据包是干嘛的是是属于什么协议什么应用的,正是因此socket代理的速度一般来说比http代理的速度快很多(因为人家不那么多事嘛,专心做好本职工作而已)。socket代理又分为socket4和sockt5代理,其中socket4只能支持TCP协议,而socket5则同时支持TCP协议和UDP协议。
第一种方法: HTTP(S)代理
废话少扯,直接上代码
package mainimport ("fmt""io/ioutil""log""net/http""net/url"
)func main() {urli := url.URL{}urlproxy, _ := urli.Parse("https://127.0.0.1:9743")c := http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(urlproxy),},}if resp, err := c.Get("https://www.google.com"); err != nil {log.Fatalln(err)} else {defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body)fmt.Printf("%s\n", body)}
}
上面这种方法是通过在建立http.Client对象时指定代理地址,其实除了这么一种方式外,还有一种就是通过环境变量来指定代理。代码如下
package mainimport ("fmt""io/ioutil""log""net/http""os"
)func main() {// 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),// },}if resp, err := c.Get("https://www.google.com"); err != nil {log.Fatalln(err)} else {defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body)fmt.Printf("%s\n", body)}
}
这个方法是通过设置环境变量,go会自动配置代理。
第二种方法: Socket5代理
package mainimport ("fmt""io/ioutil""log""net/http""os""golang.org/x/net/proxy"
)func main() {// create a socks5 dialerdialer, err := proxy.SOCKS5("tcp", "127.0.0.1:9742", nil, proxy.Direct)if err != nil {fmt.Fprintln(os.Stderr, "can't connect to the proxy:", err)os.Exit(1)}// setup a http clienthttpTransport := &http.Transport{}httpClient := &http.Client{Transport: httpTransport}// set our socks5 as the dialerhttpTransport.Dial = dialer.Dialif resp, err := httpClient.Get("https://www.google.com"); err != nil {log.Fatalln(err)} else {defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body)fmt.Printf("%s\n", body)}
}
通过这两种方法可以实现轻松爬梯。
转载于:https://www.cnblogs.com/WingPig/p/5929138.html
golang中如何使用http,socket5代理相关推荐
- golang中http协议实现
golang中http协议实现 写了一个爬虫,发现出现了socket泄露的情况.百度了一下发现是缺少了Response.Body.Close(),所以导致连接 没有被正常的关闭.也没有被gc回收.下面 ...
- Go语言中的单元测试及反向代理
一般为了保证整个系统的稳定性,通常都需要编写大量的单元测试,诸如像java的junit,php的phpunit等都提供了类似的功能.golang中的testing包提供了这个测试的功能,结合go te ...
- go的string正则匹配_基础知识 - Golang 中的正则表达式
------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...
- socket5代理简单使用
socket是什么 有两个程序,通过一个双向的通信连接实现数据交换,这个连接的一端就是一个soccet,也叫[套接字]:socket包括IP+端口,一个连接至少需要两个socket,因为连接的一端就是 ...
- Golang中Buffer高效拼接字符串以及自定义线程安全Buffer
本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. Go中可以使用"+ ...
- 如何在golang中关闭bufio.reader_Golang 并发模型系列:1. 轻松入门流水线模型
Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...
- go语言的iota是什么意思_关于Golang中的iota
快速一览 iota是Golang中提供的一个简化常量和枚举编程的标识符,合理的使用这个标识符可以让代码变得更简洁,省去大量的不必要的代码. 比如下面的这个常量定义 const ( a = 1 b = ...
- Golang中的panic和recover(捕获异常)
Golang中的panic和recover(捕获异常) 参考文章: (1)Golang中的panic和recover(捕获异常) (2)https://www.cnblogs.com/zhzhlong ...
- golang 中string和int类型相互转换
总结了golang中字符串和各种int类型之间的相互转换方式: string转成int: test_int, err := strconv.Atoi(test_string) if err != ni ...
最新文章
- 机器不学习:浅显易懂!「高中数学」读懂梯度下降的数学原理
- POJ2886线段树 Joseph游戏(单点更新)
- 【渝粤教育】国家开放大学2019年春季 1018国际公法 参考试题
- windows获取IP和MAC地址【Qt】
- UIImage 图像-IOS开发 (实例)
- 文本框仅可接收decimal
- C++ 洛谷 P2704 [NOI2001]炮兵阵地
- 【比赛】新冠肺炎疫情趋势预测大赛~推荐大家参加下
- 西门子mag6000接线_西门子MAG5000/6000电磁流量计应用及安装
- 公有云服务器租赁协议,云服务器
- pem格式证书编码 x509_PEM证书格式
- 程序员:走路也可以帮你拥有完美的翘臀!
- 智能手机操作系统大全-未完待续
- insert table mysql_MYSQL insert data(如何插入数据到table)
- Android4.4蓝牙耳机HFP流程分析-1
- 最容易被人工智能取代的10种职业,今年换工作别入坑了!
- 为什么要学Python 编程?(附Python学习路线)
- Unix/Linux编程:进程间通信(IPC)总结
- 区块链公证书的诞生与应用
- 结构光的计算机视觉,3D结构光人脸识别技术面世