我正在尝试为一个向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() // ...
}
Run Code Online (Sandbox Code Playgroud)
我的包有一个包变量(我希望它是一个常量..),用于查询的Web服务的基地址.这是一个https URL.我上面创建的测试服务器是纯HTTP,没有TLS.
默认情况下,我的测试失败并显示错误"tls:第一条记录看起来不像TLS握手".
为了使其工作,我的测试在进行查询之前将包变量更改为普通的http URL而不是https.
有没有办法解决?我可以将包变量设为常量(https),并设置http.Transport"降级"为未加密的HTTP,还是使用httptest.NewTLSServer()?
(当我尝试使用时,NewTLSServer()我从127.0.0.1:45678获取"http:TLS握手错误:tls:收到长度超过20037的记录")