golang中如何使用http,socket5代理
Golang Http use socket5 proxy
因为最近想爬取一些网站上的视频,无奈网站在墙外,只能通过代理进行爬取,因此在网上搜索关于golang使用代理的方法。
功夫不负有心人,最后我搜到了两张配置方法,趁着现在有空将它们总结一下。
Http和Socket代理经常翻墙的梯子户经常用到,但是有些可能不怎么知道他们的区别。估计大家已经从它们的名字中看出了区别,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 main
import (
"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 main
import (
"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 main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"golang.org/x/net/proxy"
)
func main() {
// create a socks5 dialer
dialer, 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 client
httpTransport := &http.Transport{}
httpClient := &http.Client{Transport: httpTransport}
// set our socks5 as the dialer
httpTransport.Dial = dialer.Dial
if 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)
}
}
通过这两种方法可以实现轻松爬梯。
golang中如何使用http,socket5代理的更多相关文章
- 基础知识 - Golang 中的正则表达式
------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...
- Golang中的RegExp正则表达式用法指南
------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...
- golang中的race检测
golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...
- golang中的reflect包用法
最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...
- webpack+vue-cil 中proxyTable配置接口地址代理
webpack+vue-cil 中proxyTable配置接口地址代理 在项目开发的时候,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们现在使用vue-cli进行项目打包 ...
- Golang中的坑二
Golang中的坑二 for ...range 最近两周用Golang做项目,编写web服务,两周时间写了大概五千行代码(业务代码加单元测试用例代码).用Go的感觉很爽,编码效率高,运行效率也不错,用 ...
- Golang 中的坑 一
Golang 中的坑 短变量声明 Short variable declarations 考虑如下代码: package main import ( "errors" " ...
- google的grpc在golang中的使用
GRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,基于Netty 4.x. 前面写过一篇golang标准库的rpc包的用法,这篇文章接着讲一 ...
- Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper
Golang中操作数据库已经有现成的库"database/sql"可以用,但是"database/sql"只提供了最基础的操作接口: 对数据库中一张表的增删改查 ...
随机推荐
- Mint linux 自定义上下文菜单实现ZIP压缩文件无乱码解压
1. 前提条件 我的Mint Linux 是Thunar文件管理器(默认的). 2. 配置自定义动作 打开Thunar文件管理器,点击菜单“编辑”=>“配置自定义动作”.点击“+”添加一个新的. ...
- java:警告:[unchecked] 对作为普通类型 java.util.HashMap 的成员的put(K,V) 的调用未经检查
java:警告:[unchecked] 对作为普通类型 java.util.HashMap 的成员的put(K,V) 的调用未经检查 一.问题:学习HashMap时候,我做了这样一个程序: impor ...
- MySQL GROUP BY用法
背景介绍 最近在设计数据库的时候因为开始考虑不周,所以产生了大量的重复数据.现在需要把这些重复的数据删除掉,使用到的语句就是Group By来完成.为了进一步了解这条语句的作用,我打算先从简单入手. ...
- SQLyog图形化l数据库的操作和学习
1:首先SQLyog作为mysql的图形化操作工具,是一个收费的工具,但是在天朝大国,任何收费的软件都可以被破解,具体软件的安装不做多叙述,支持正版,毕竟作为一个开发人员,辛辛苦苦开发出来的软件,还指 ...
- DAC Usage2:通过DAC实现DB Schema的Migration和Upgrade
一,Introduce Extract DAC 是从现存的DB中创建DAC,抽取DB Object的definition 和 与之相关的实例级别的元素,比如Login,以及Login 和User之间的 ...
- c#写windows服务
序言 前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总 ...
- 移动web app开发必备 - 异步队列 Deferred
背景 移动web app开发,异步代码是时常的事,比如有常见的异步操作: Ajax(XMLHttpRequest) Image Tag,Script Tag,iframe(原理类似) setTimeo ...
- [转]浏览器退出之后php还会继续执行么?
原文链接:http://www.cnblogs.com/yjf512/p/5362025.html 前提:这里说的是典型的lnmp结构,nginx+php-fpm的模式 如果我有个php程序执行地非常 ...
- sublime text学习
Ctrl + / ---------------------注释 Ctrl + 滚动 --------------字体变大/缩小 Ctrl + N-------------------新建 软件右下 ...
- [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证
很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前请求者是一个经过授权的用户.授权的本质就是让用户在他许可的权限范围内做他能够做的事情,授权的前提是请求者 ...