我正在尝试为向 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 的超大记录”)
相关分类