当前位置: 首页 > 知识库问答 >
问题:

如何在Golang中为http.get()请求设置超时?

吴经略
2023-03-14

我正在制作一个URL提取器,并有一个要提取的URL列表。我向每个URL发送http.get()请求并获取它们的响应。

resp,fetch_err := http.Get(url)

如何为每个Get请求设置自定义超时?(默认时间很长,这使得我的取数器非常慢。)我希望我的提取器有一个大约40-45秒的超时,之后它应该返回“Request timed Out”并移动到下一个URL。

我怎样才能做到这一点呢?

共有2个答案

储承
2023-03-14

您需要使用自己的传输来设置自己的客户端,该传输使用包含DialTimeout的自定义拨号功能。

类似于(完全未经检验的)这样的东西:

var timeout = time.Duration(2 * time.Second)

func dialTimeout(network, addr string) (net.Conn, error) {
    return net.DialTimeout(network, addr, timeout)
}

func main() {
    transport := http.Transport{
        Dial: dialTimeout,
    }

    client := http.Client{
        Transport: &transport,
    }

    resp, err := client.Get("http://some.url")
}
牟正真
2023-03-14

显然在Go1.3中HTTP.Client有超时字段

client := http.Client{
    Timeout: 5 * time.Second,
}
client.Get(url)

这对我来说已经成功了。

 类似资料:
  • 问题内容: 我在Go中制作了一个URL提取程序,并具有要提取的URL列表。我将请求发送到每个URL并获得他们的响应。 如何为每个Get请求设置自定义超时?(默认时间很长,这会使我的提取程序非常慢。)我希望提取程序的超时时间为40-45秒左右,之后它应该返回“请求超时”并移至下一个URL。 我该如何实现? 问题答案: 显然在Go 1.3中,http.Client具有“超时”字段 这为我完成了窍门。

  • 我有一个同步终结点,定义如下: 当30秒后返回的<code>Future<code>未完成时,请求将被取消。 如何增加此特定终结点的超时(例如,增加到 100 秒)? 我只找到了更改所有endpoint的答案: 指定Spring中控制器异步方法的超时时间 延迟结果的Spring长轮询

  • 问题内容: 我的Java Web应用程序有问题。 这是index.jsp中的代码: 当我有线请求时,我的浏览器发送以下标头: Tomcat服务器返回以下信息: 但是,如果我以我的形式发送“é”(UTF-8中的%C3%A9),则会显示“é”。 我了解的是浏览器发送了一个用UTF-8(%C3%A9)编码的“é”。 但是服务器将其解释为ISO-8859-1。因此,%C3解码为Ã,%A9解码为©,然后发

  • 问题内容: 我创建了以下函数来检查连接状态: 当我关闭服务器以测试执行情况时,会在网上等待很长时间 有谁知道如何设置超时以避免等待太久? 问题答案: 在我的示例中,设置了两个超时。连接超时抛出,套接字超时。 如果要设置任何现有HTTPClient的参数(例如或,则可以使用函数。

  • 问题内容: 我需要为我们对服务(而非Web服务)发出的Http请求设置超时。我们正在使用Apache HTTP客户端。我添加了这两行代码,以根据请求和对服务的响应设置超时时间。 1)目前,我已将超时设置为10秒,因为我几乎立即从服务中看到了响应。我应该增加还是减少时间? 2)如果响应时间超过10秒,会发生什么?它会抛出异常吗?它将是什么异常?我还需要添加其他内容来设置以下代码中的超时时间。 问题答

  • 我有一个TcpClient,用于将数据发送到远程计算机上的侦听器。远程计算机有时打开,有时关闭。因此,TCP客户端将经常无法连接。我希望TcpClient在一秒钟后超时,这样当它无法连接到远程计算机时就不会花费太多时间。目前,我对TcpClient使用以下代码: 这对于处理任务来说已经足够好了。如果可以,它会发送它,如果无法连接到远程计算机,它会捕获异常。然而,当它无法连接时,抛出异常需要10到1