使用 HTTP GET 请求拨打 tcp i/o 超时

R.J*_*.J. 9 go go-http

遇到一些错误,我一定是忽略了一些东西。我该如何调试这个?断开连接?

我读了以下内容:
golang - Why net.DialTimeout get timeout half the time?
去。在服务器程序 golang 中获取错误 i/o 超时
在 ubuntu 14.04 LTS 中获取大量读取 tcp ip:port i/o 超时
在 Go 源代码中定位“read tcp”错误
偶尔出现“http: proxy error: read tcp: i/ Heroku 上的 o 超时”

此处创建错误: https://github.com/golang/go/blob/b115207baf6c2decc3820ada4574ef4e5ad940ec/src/net/net.go#L179

目标:向 url 发送 Get 请求。
预期结果:以 JSON 格式返回正文。
遇到的问题:I/O 超时

它适用于邮递员
编辑:我添加了修改后的超时...

编辑2:跟踪错误

邮递员请求:

GET /v2/XRP-EUR/candles?interval=1h HTTP/1.1
Host: api.bitvavo.com
Run Code Online (Sandbox Code Playgroud)

邮递员结果(1440 行):

[
    [
        1609632000000,
        "0.17795",
        "0.17795",
        "0.17541",
        "0.17592",
        "199399.874013"
    ],
    [
        1609628400000,
        "0.17937",
        "0.18006",
        "0.17622",
        "0.17852",
        "599402.631894"
    ],
    [
        1609624800000,
        "0.18167",
        "0.18167",
        "0.17724",
        "0.17984",
        "579217.962574"
    ],.....
Run Code Online (Sandbox Code Playgroud)

代码:

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
    "time"
)

func main() {
    url := "https://api.bitvavo.com/v2/XRP-EUR/candles?interval=1h"
    method := "GET"

    client := &http.Client {
    }
    client.Timeout = time.Second * 60
    req, err := http.NewRequest(method, url, nil)

    if err != nil {
        fmt.Println(err)
        return
    }
    res, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer res.Body.Close()

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(body))
}
Run Code Online (Sandbox Code Playgroud)

结果:

Get "https://api.bitvavo.com/v2/XRP-EUR/candles?interval=1h": dial tcp 65.9.73.10:443: i/o timeout
Run Code Online (Sandbox Code Playgroud)

ton*_*ton 6

我在构建 docker 容器时遇到了这个问题。

不知道为什么,但是在 dockerswarm leave --force和systemctl restart docker构建工作之后。


R.J*_*.J. 2

本地环境,防火墙不允许golang拨号tcp..
它仍然允许url解析为ip(DNS)

解决方案:更改主机上的防火墙设置以允许应用程序连接或暂时关闭防火墙进行测试,检查 Docker/kubernetes/反向代理设置

  • 所以?建议的解决方案是什么,在本地更改防火墙设置? (2认同)