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代理相关推荐

  1. golang中http协议实现

    golang中http协议实现 写了一个爬虫,发现出现了socket泄露的情况.百度了一下发现是缺少了Response.Body.Close(),所以导致连接 没有被正常的关闭.也没有被gc回收.下面 ...

  2. Go语言中的单元测试及反向代理

    一般为了保证整个系统的稳定性,通常都需要编写大量的单元测试,诸如像java的junit,php的phpunit等都提供了类似的功能.golang中的testing包提供了这个测试的功能,结合go te ...

  3. go的string正则匹配_基础知识 - Golang 中的正则表达式

    ------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...

  4. socket5代理简单使用

    socket是什么 有两个程序,通过一个双向的通信连接实现数据交换,这个连接的一端就是一个soccet,也叫[套接字]:socket包括IP+端口,一个连接至少需要两个socket,因为连接的一端就是 ...

  5. Golang中Buffer高效拼接字符串以及自定义线程安全Buffer

    本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. Go中可以使用"+ ...

  6. 如何在golang中关闭bufio.reader_Golang 并发模型系列:1. 轻松入门流水线模型

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...

  7. go语言的iota是什么意思_关于Golang中的iota

    快速一览 iota是Golang中提供的一个简化常量和枚举编程的标识符,合理的使用这个标识符可以让代码变得更简洁,省去大量的不必要的代码. 比如下面的这个常量定义 const ( a = 1 b = ...

  8. Golang中的panic和recover(捕获异常)

    Golang中的panic和recover(捕获异常) 参考文章: (1)Golang中的panic和recover(捕获异常) (2)https://www.cnblogs.com/zhzhlong ...

  9. golang 中string和int类型相互转换

    总结了golang中字符串和各种int类型之间的相互转换方式: string转成int: test_int, err := strconv.Atoi(test_string) if err != ni ...

最新文章

  1. 机器不学习:浅显易懂!「高中数学」读懂梯度下降的数学原理
  2. POJ2886线段树 Joseph游戏(单点更新)
  3. 【渝粤教育】国家开放大学2019年春季 1018国际公法 参考试题
  4. windows获取IP和MAC地址【Qt】
  5. UIImage 图像-IOS开发 (实例)
  6. 文本框仅可接收decimal
  7. C++ 洛谷 P2704 [NOI2001]炮兵阵地
  8. 【比赛】新冠肺炎疫情趋势预测大赛~推荐大家参加下
  9. 西门子mag6000接线_西门子MAG5000/6000电磁流量计应用及安装
  10. 公有云服务器租赁协议,云服务器
  11. pem格式证书编码 x509_PEM证书格式
  12. 程序员:走路也可以帮你拥有完美的翘臀!
  13. 智能手机操作系统大全-未完待续
  14. insert table mysql_MYSQL insert data(如何插入数据到table)
  15. Android4.4蓝牙耳机HFP流程分析-1
  16. 最容易被人工智能取代的10种职业,今年换工作别入坑了!
  17. 为什么要学Python 编程?(附Python学习路线)
  18. Unix/Linux编程:进程间通信(IPC)总结
  19. 区块链公证书的诞生与应用
  20. 结构光的计算机视觉,3D结构光人脸识别技术面世

热门文章

  1. Android 布局之GridLayout(转载)
  2. Html5 小球键盘移动
  3. 做地推怎么跟人打招呼
  4. 细节真的能决定成败么?
  5. 7805急剧发热,可能是什么原因?
  6. 短视频自媒体成功的秘诀就一个字:真
  7. 男人有钱还是没钱,只需要关注他这三点,就明白了
  8. 社会化生态农场品,社群+农产品,大有搞头
  9. 为什么手机用久了,就不那么流畅了,啥原因?
  10. 终于把Redis场景设计搞清楚了,需要掌握的都在这了