为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中模拟 HTTPS 响应

在 Go 中模拟 HTTPS 响应

Go
GCT1015 2021-09-10 18:11:11
我正在尝试为向 Web 服务发出请求的包编写测试。我遇到的问题可能是由于我对 TLS 缺乏了解。目前我的测试看起来像这样:func TestSimple() {    server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {        w.Header().Set("Content-Type", "application/json")        w.WriteHeader(200)        fmt.Fprintf(w, `{ "fake" : "json data here" }`)    }))    transport := &http.Transport{        Proxy: func(req *http.Request) (*url.URL, error) {            return url.Parse(server.URL)        },    }    // Client is the type in my package that makes requests    client := Client{        c: http.Client{Transport: transport},    }    client.DoRequest() // ...}我的包有一个包变量(我希望它是一个常量..),用于查询 Web 服务的基地址。它是一个 https 网址。我上面创建的测试服务器是纯 HTTP,没有 TLS。默认情况下,我的测试失败并显示错误“tls:第一条记录看起来不像 TLS 握手”。为了让它起作用,我的测试在进行查询之前将包变量更改为普通的 http URL 而不是 https。有没有办法解决?我可以将包变量设置为常量 (https),然后设置一个http.Transport“降级”到未加密的 HTTP,或者httptest.NewTLSServer()改为使用?(当我尝试使用时,NewTLSServer()我收到“http: TLS 握手错误来自 127.0.0.1:45678: tls: 收到长度为 20037 的超大记录”)
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 261 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信