繁体   English   中英

获取 net/http: TLS 握手超时 golang

[英]Get net/http: TLS handshake timeout golang

需要你的帮助

package main

import (
    "log"
    "net/http"
)

func main() {
    client := &http.Client{}
    _, err := client.Get("https://www.marathonbet.com/en/")
    if err != nil {
        log.Fatalf("%s\n", err)
    }
}

这总是返回: Get https://www.marathonbet.com/en/: net/http: TLS handshake timeout exit status 1我尝试:并使用库并执行但对我没有任何作用..所以,请帮我。

更新:在带有请求的 Python 2.7 中,这有效:

s = Session()
r = s.get('https://www.marathonbet.com/en/, verify=False)

但我需要用 go(

UPD:修正:只需replase https://www.marathonbet.com/en/https://87.117.250.213/en/并添加skip verify 谢谢大家的帮助。

这是对正在发生的事情的更详细的解释。 当您调用域时,您的 HTTP 客户端会调用 DNS 服务器。 DNS 服务器以目标服务器的 IP 响应。 此时一切正常。

如果是 HTTPS 连接,则它会启动 TLS 握手。 这是它的工作原理。

TLS 握手

这就是您遇到问题的地方。 请求已发送,但服务器没有正确回答(或根本没有回答)。 它可能是由许多因素引起的,例如服务器:

  • 不可访问
  • 需要更多时间来回应
  • 可以隐藏在一些拒绝连接的防火墙/代理后面
  • 阻止来自您的 IP/位置的所有请求
  • 等等

通过提供skip verify选项并提供明确的 IP 地址,您可以跳过我上面描述的所有内容。 它的意思是:

  • 如果服务器的 IP 更改,您的代码将停止工作
  • 如果有人执行中间人附加,您将不会发现它。

如果不进行更深入的调查,很难找出根本原因。 如果您想了解发生了什么,按照@Flowchartsman 的建议使用 httptrace

暂无
暂无

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

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