相关疑难解决方法(0)

在Go中模拟HTTPS响应

我正在尝试为一个向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的记录")

testing ssl go

6
推荐指数
1
解决办法
6280
查看次数

标签 统计

go ×1

ssl ×1

testing ×1