golang http 连接超时和传输超时的例子

 更新时间:2019年07月12日 16:39:57   作者:白小狮  
今天小编就为大家分享一篇golang http 连接超时和传输超时的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

golang 测试代码

package main

import (
  "net/http"
  "net/url"
  "fmt"
  "io/ioutil"
  "time"
  "net"
  "crypto/tls"
)

func TimeoutDialer(cTimeout time.Duration, rwTimeout time.Duration) func(net, addr string) (c net.Conn, err error) {
  return func(netw, addr string) (net.Conn, error) {
    conn, err := net.DialTimeout(netw, addr, cTimeout)
    if err != nil {
      return nil, err
    }
    conn.SetDeadline(time.Now().Add(rwTimeout))
    return conn, nil
  }
}

func main() {

  connectTimeout := 5 * time.Second
  readWriteTimeout := 100 * time.Millisecond

  c := http.Client{
    Transport: &http.Transport{
      TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
      Dial:      TimeoutDialer(connectTimeout, readWriteTimeout),
    },
  }

  uri := "https://www.youtobe.com"
  req, err := http.NewRequest(http.MethodPost, uri, nil)
  if err != nil {
    fmt.Println("req error:" + err.Error())
    return
  }

  req.Header = http.Header{}

  req.Header["Connection"] = []string{"Close"}
  req.Header["User-Agent"] = []string{"wpt-http-client/1.1"}

  data := make(url.Values)

  data["name"] = []string{"baixs"}
  data["hobby"] = []string{"runing"}

  resp, err := c.Do(req)
  if err != nil {
    fmt.Println("do error,err:" + err.Error())
    return
  }

  respBody, err := ioutil.ReadAll(resp.Body)

  fmt.Println(string(respBody))

}

测试结果

连接超时(包括握手)

传输超时(也就是读写,从accept开始计算 )

以上这篇golang http 连接超时和传输超时的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Go命令行参数解析flag 包使用示例详解

    Go命令行参数解析flag 包使用示例详解

    这篇文章主要介绍了Go命令行参数解析flag 包使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • Go语言IO输入输出底层原理及文件操作API

    Go语言IO输入输出底层原理及文件操作API

    这篇文章主要为大家介绍了Go语言IO输入输出底层原理及文件操作API示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Golang中Append()使用实例详解

    Golang中Append()使用实例详解

    今天在刷leetcode的时候,第113题让我遇到了一个Go语言中append函数的一个坑,所以复习下,这篇文章主要给大家介绍了关于Golang中Append()使用的相关资料,需要的朋友可以参考下
    2023-01-01
  • 一文带你搞懂Golang如何正确退出Goroutine

    一文带你搞懂Golang如何正确退出Goroutine

    在Go语言中,Goroutine是一种轻量级线程,它的退出机制对于并发编程至关重要,下午就来介绍几种Goroutine的退出机制,希望对大家有所帮助
    2023-06-06
  • 深入解析Go 变量字符串与字符编码问题

    深入解析Go 变量字符串与字符编码问题

    Go的字符串是由单个字节连接起来的,Go语言的字符串的字节使用UTF-8编码标识Unicode文本,接下来通过本文给大家介绍下Go变量字符串与字符编码问题,需要的朋友可以参考下
    2022-04-04
  • 关于golang监听rabbitmq消息队列任务断线自动重连接的问题

    关于golang监听rabbitmq消息队列任务断线自动重连接的问题

    这篇文章主要介绍了golang监听rabbitmq消息队列任务断线自动重连接,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 详解Golang Iris框架的基本使用

    详解Golang Iris框架的基本使用

    这篇文章主要介绍了Golang Iris框架的基本使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-11-11
  • go通过编码缩短字符串的长度实现方法步骤

    go通过编码缩短字符串的长度实现方法步骤

    这篇文章主要为大家介绍了go通过编码缩短字符串的长度实现方法步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Go语言学习笔记之文件读写操作详解

    Go语言学习笔记之文件读写操作详解

    这篇文章主要为大家详细介绍了Go语言对文件进行读写操作的方法,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以参考一下
    2022-05-05
  • Go语言net包RPC远程调用三种方式http与json-rpc及tcp

    Go语言net包RPC远程调用三种方式http与json-rpc及tcp

    这篇文章主要为大家介绍了Go语言net包RPC远程调用三种方式分别使用http与json-rpc及tcp的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11

最新评论