我在 Goland 的 https 请求配置有什么错误

问题描述 投票:0回答:1

我有一个通过 Rest 查询服务的 Go 命令。 到目前为止,我使用 http 并且没有任何问题,但是一旦我转移到 https,我就会收到一个奇怪的错误,我不知道如何处理。

这是我创建客户端的功能:

func getClient(url string, timeout time.Duration) *http.Client {
    const ConnectMaxWaitTime = 10 * time.Minute

    if strings.HasPrefix(url, "https") {
        cert := getCert()
        logHandler("protocol is https, got cert", "DEBUG")
        client := &http.Client{
            Timeout: timeout,
            Transport: &http.Transport{
                DialContext: (&net.Dialer{
                    Timeout: ConnectMaxWaitTime,
                }).DialContext,
                TLSClientConfig: &tls.Config{
                    InsecureSkipVerify:    true,
                    VerifyPeerCertificate: VerifyPeerCertificateAlt,
                    RootCAs:               cert,
                },
            },
        }
        return client
    } else {
        client := &http.Client{
            Timeout: timeout,
            Transport: &http.Transport{
                DialContext: (&net.Dialer{
                    Timeout: ConnectMaxWaitTime,
                }).DialContext,
            },
        }
        return client
    }
}

您可以在上面看到两种方式 - https 和 http。 我有两种类型的错误,通常出现在流输出的末尾(这会缩短)。要么是

格式错误的分块编码

tls:收到版本 967d 的记录,而期望版本 303

我做错了什么/Https 客户端中缺少什么导致了此问题? 值得一提的是,它只发生在大输出和远程服务器上。我想了解可能是什么问题,即使问题不在我的客户端。

rest go http https request
1个回答
0
投票

malformed chunked encoding
可能与未正确关闭上一个请求有关。

tls: received record with version 967d when expecting version 303
表示您需要将
TLSHandshakeTimeout
添加到
*http.Transport

这是一个基于您上面发布的内容的小示例:

client := &http.Client{ Timeout: timeout, Transport: &http.Transport{ DialContext: (&net.Dialer{ Timeout: ConnectMaxWaitTime, }).DialContext, TLSHandshakeTimeout: 60 * time.Second TLSClientConfig: &tls.Config{ InsecureSkipVerify:    true, VerifyPeerCertificate: VerifyPeerCertificateAlt, RootCAs:               cert, }, }, }

© www.soinside.com 2019 - 2024. All rights reserved.