繁体   English   中英

如何在Go中检查错误是否为TLS握手超时

[英]How to check if error is tls handshake timeout in Go

我有以下代码向URL请求并检查错误。

import "net/http"

response, err := http.Head("url")

如何检查错误是否是由于tls握手超时引起的? 我尝试了以下方法:

if err != nil {
    tlsError, ok := err.(http.tlsHandshakeTimeoutError)
    if ok {
        // handle the error
    }
}

但是我无法访问http.tlsHandshakeTimeoutError类型,因为它未导出。 我还能如何检查go中的错误类型?

tlsHandshakeTimeoutError不导出,并且检查此错误的唯一可能性是:

import "net/url"

// ....

if urlError,ok :=  err.(*url.Error)  ; ok {
    if urlError.Error() == "net/http: TLS handshake timeout" {
        // handle the error
    }
}

这是关于它的讨论的公开票:

https://github.com/golang/go/issues/15935

顺便说一下, http错误(还有tlsHandshakeTimeoutError还提供:

type WithTimeout interface {
   Timeout() bool
}

您可以使用它来检查是否不喜欢字符串比较。 是来自http2包的isTemporary实现的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM