http - 使用golang终止来自IP层的http请求

标签 http go tcp

我正在使用 golang 向服务器发出 http post 请求。假设服务器当前已关闭(意味着运行服务器的机器已关闭),则请求将停留在IP层。所以我的程序执行无法进一步进行。无法进入应用层。那么 golang 有没有办法阻止这种情况。 我正在使用以下代码。

req, err := http.NewRequest("POST", url, bytes.NewReader(b))
       if err != nil {
               return errors.Wrap(err, "new request error")
       }
resp, err := http.DefaultClient.Do(req)
       if err != nil {
               return errors.Wrap(err, "http request error")
       }
       defer resp.Body.Close()

是否可以添加任何内容,以便在没有从 IP 层找到任何内容时终止请求。

最佳答案

默认的http Client没有超时。您可以自己创建一个显式的 http.Client 并设置超时:

var cl = &http.Client{
    Timeout: time.Second * 10,
}

resp, err := cl.Do(req)

if err != nil {
    // err will be set on timeout
    return errors.Wrap(err, "http request error")
}
defer resp.Body.Close()

如果服务器在请求过程中不再应答,您可以处理超时。

关于http - 使用golang终止来自IP层的http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50694559/

相关文章:

c# - 我的 .Net 套接字处理程序丢失数据包

angular - this.interceptor.intercept 不是函数 Angular 8

go - 如何通过reflect.TypeOf(interface{})从struct迭代*T funcs?

iphone - 通过 wifi 与硬件设备进行短信通信的最佳方式

go - 如何将 []interface{} 转换为自定义类型 - Go lang?

mongodb - 在不解码的情况下在 upsert 中使用 mgo 聚合迭代器数据

tcp - 在Rust中设置std::net::TcpStream的发送缓冲区大小

ruby-on-rails - 如何处理仅供其他第三方应用程序访问的 Web 应用程序的 HTTP 身份验证?

java - 如何在 HTTP 之上设计 Java 服务器和 Java worker 之间的协议(protocol)?

安全性——可以通过 HTTP GET 发送用户名和密码吗?