Go1.10 支持 HTTPS 代理

Go1.9 出来后 6 个多月的时间,Go1.10 就被发布。新版本带来大大小小的变化(发行说明),但是我想谈谈有关 net/http 包的改变。1.10 版本支持在 HTTPS(commit) 上的代理,而在原来它只能通过使用普通的(未加密)HTTP 来和代理进行沟通。接下来让我们来看看它是否真的可以工作。

Server

为了验证这一改变,首先请用 golang 启动一个简单的 HTTP(S) 代理服务器。具体做法可以从下面文章了解。

HTTP(S) Proxy in Golang in less than 100 lines of code

Client

package main
import ("net/url""net/http""crypto/tls""net/http/httputil""fmt"
)
func main() {u, err := url.Parse("https://localhost:8888")if err != nil {panic(err)}tr := &http.Transport{Proxy: http.ProxyURL(u),// disabled HTTP/2TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper),}client := &http.Client{Transport: tr}resp, err := client.Get("https://google.com")if err != nil {panic(err)}defer resp.Body.Close()dump, err := httputil.DumpResponse(resp, true)if err != nil {panic(err)}fmt.Printf("%q", dump)
}

1.9 和 1.10 对比

>go version
go version go1.10 darwin/amd64
>go run proxyclient.go
"HTTP/1.1 200 OKrnTransfer-Encoding:...
>go version
go version go1.9 darwin/amd64
>go run proxyclient.go
panic:Get https://google.com:malformed HTTP response "x15x03x01x00x02x02x16"
...

从第一个结果看到,使用 Go1.10,我们通过代理服务器https//google.com监听https://localhost:8888得到正确的响应。而第二个结果显示 Go1.9 搭建的 HTTP 客户端被拒绝。

如果你想了解更多关于 Go 更新的内容,请在这里关注我或者在Twitter上。


首发于:https://studygolang.com/articles/12525

go get 代理 找不到包_初步看看Go1.10 支持 HTTPS 代理相关推荐

  1. vs2017python找不到包_关于Python在VS2017版中编译C源代码出现的各种问题解决方法...

    1. 找不到vcvarsall.bat 在VS Installer中安装VC140编译器(默认只安了VC141) 2. 找不到io.h,cl.exe,MSVCRT.lib等一切文件的 在C:\Prog ...

  2. proxy跨域不生效_前端开发:深入使用proxy代理解决跨域问题

    在前端领域里面,跨域指的是浏览器允许向服务器发送跨域请求,进而克服Ajax只能同源使用的局限性限制.同源策略是一种约定,而且是浏览器中最基本也是最核心的安全功能,若缺少了该策略,浏览器非常容易被*** ...

  3. 【转】http与https代理中的差异及细节

    前提: HTTP/1.1中,默认开启长连接,如客户端不需要,需要加上请求首部connection:close告知服务器.如服务器不支持长连接,则需要加上响应首部connection:close告知客户 ...

  4. nginx https透明代理_nginx正向https代理配置

    一.前言 1.1 正向代理功能比较简单,但是原生nginx不支持https代理,如果访问https网站,会报错. # nginx代理不支持http CONNECT方法:curl: (56) Recei ...

  5. 成功解决 git设置http代理 https代理 取消代理

    welcome to my blog 问题: 使用hexo搭建博客, 执行hexo init时包含git clone的操作,但是使用的是https协议, 不是ssh, 所以为git设置https代理, ...

  6. 2019年9月-最新整理国内2000个HTTPS代理ip

    2019年9月最新国内HTTPS代理ip 171.35.163.80:9999 182.34.36.242:9999 210.22.176.146:32153 171.13.137.81:9999 2 ...

  7. cglib动态代理jar包_代理模式详解:静态代理+JDK/CGLIB 动态代理实战

    1. 代理模式 代理模式是一种比较好的理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标 ...

  8. python 不执行函数_解决python调用自己文件函数/执行函数找不到包问题

    写python程序的时候很多人习惯创建一个utils.py文件,存放一些经常使用的函数,方便其他文件调用,同时也更好的管理一些通用函数,方便今后使用.或是两个文件之间的class或是函数调用情况. 就 ...

  9. pip安装了 但是python找不到_解决python明明pip安装成功却找不到包的问题

    解决python明明pip安装成功却找不到包的问题 如下所示: 原因1:版本不对,如用环境变量设置的python3.7路径,那么用的就是3.7的pip.exe安装了包.却用的是2.7的python运行 ...

最新文章

  1. 【Java小工匠聊密码学】--base58编码
  2. 【MATLAB】数据类型 ( 执行代码 | 清空命令 | 注释 | 数字 | 字符 | 字符串 )
  3. hibernate+mysql保存中文数据乱码问题
  4. Qt 并行计算圆周率示例
  5. linux安装python3教程_linux下安装python3和对应的pip环境教程详解
  6. 四叶草剧场服务器维修价格,四叶草剧场不合理报酬机制是什么-不合理报酬机制和收益详解-Appfound...
  7. Extjs grid 设置行字体颜色
  8. 微信小程序获取tabbar的高度_微信小程序自定义tabbar
  9. 第6章 可编程并行通信接口8255A
  10. 聚焦 ECharts
  11. 关于C2100间接寻址的问题
  12. SCOI 2016 bzoj 4567~4572 题解
  13. 跳板机/堡垒机并不安全
  14. python分析股票主力_筹码分布及计算原理
  15. dump analyze
  16. 总结 and 读后感之自控力 By 凯利·麦格尼格尔
  17. P1216 数字金字塔
  18. 彻底解决EMI问题,只需8秒
  19. 嵌入式开发为什么用C语言
  20. 中国移动和中国联通无线上网和资费详细

热门文章

  1. docker 僵尸进程解决方案 Baseimage-docker,胖容器和“容器也是虚拟机”
  2. python3 计时性能测试 %timeit %%timeit
  3. 使用OpenVAS 9进行漏洞扫描
  4. Android利用ViewPager实现滑动广告板
  5. 深入理解 C 指针阅读笔记 -- 第二章
  6. linux ping 连续,在SUN Solaris下连续ping的使用
  7. gitlab 钩子 php,gitlab通过webhook.php自动部署标签
  8. matlab的NLP功能,pyhanlp 共性分析与短语提取内容详解
  9. php.ini 延迟,php超时报错Maximum execution time of 120 seconds exceeded in解决办法
  10. 杭州java班学费多少_杭州学java费用多少