首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TLSClientConfig的传输中替换http.Client?

在TLSClientConfig的传输中替换http.Client?
EN

Stack Overflow用户
提问于 2022-11-06 00:52:27
回答 1查看 54关注 0票数 1

请考虑这个问题。

ourClient是一个*http.Client --一旦生成它,如何仅改变TLSClientConfig (它的类型是tls.Config{})?

代码语言:javascript
复制
package main

import (
    "crypto/tls"
    "fmt"
    "net"
    "net/http"
    "time"
)

func main() {
    transport := &http.Transport{
        TLSHandshakeTimeout: 10 * time.Second,
        Dial: (&net.Dialer{
            Timeout:   1 * time.Second,
            KeepAlive: 30 * time.Second,
        }).Dial,
        TLSClientConfig: &tls.Config{},
    }

    ourClient := &http.Client{
        Timeout:   5 * time.Second,
        Transport: transport,
    }

    fmt.Printf("http.Client Timeout %v\n", ourClient.Timeout)
    ourClient.Timeout = 3 * time.Second
    fmt.Printf("http.Client Timeout %v\n", ourClient.Timeout)

    // how do I replace the TLSClientConfig in ourClient
    // newTLSClientConfig := &tls.Config{}
    // ourClient.Transport.TLSClientConfig = newTLSClientConfig
    // ourClient.Transport.TLSClientConfig undefined (type http.RoundTripper has no field or method TLSClientConfig)

    fmt.Printf("http: %#v\n", ourClient)
}

(同时张贴为https://go.dev/play/p/v1HJLZ-MhhH)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-06 01:06:21

http.RoundTripper是一个接口--您需要使用类型断言将它转换为具体的实现,例如:

代码语言:javascript
复制
    ...
    newTLSClientConfig := &tls.Config{}
    if tpt, ok := ourClient.Transport.(*http.Transport); ok {
        tpt.TLSClientConfig = newTLSClientConfig
    }
    ...

https://go.dev/play/p/2UinL3Uazid

它可能更好地解释了这里,但是FWIW - http.Client.Transport被声明为一个RoundTripper接口,一个接口可以有许多不同的实现,而其中没有一个由接口契约保证有一个TLSClientConfig字段。所以Go编译器不允许您分配newTLSClientConfig字段,因为它在法律上不能。

类型断言断言接口的具体实现符合类型,并将接口的实现(在本例中为http.Transport)分配给变量(本例中为tpt)。因此,现在可以保证tpthttp.Transport的一个实例,这意味着您现在可以将newTLSClientConfig分配给TLSClientConfig字段。

如果ok是错误的,那就意味着RoundTripper接口的实现不是http.Transport

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74332573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档