如何在Go HTTP客户端中进行空闲超时?
空闲超时意味着从HTTP客户端内部调用Conn接口的读/写方法时超时。当客户端下载文件时,它会很有用,并且在某些时候由于达到读取超时而导致下载失败。
答案 0 :(得分:1)
您需要创建自己的net.Dialer
,返回net.Conn
,设置相应的读写截止日期。
Conn
看起来像这样:
// Conn wraps a net.Conn, and sets a deadline for every read
// and write operation.
type Conn struct {
net.Conn
ReadTimeout time.Duration
WriteTimeout time.Duration
}
func (c *Conn) Read(b []byte) (int, error) {
err := c.Conn.SetReadDeadline(time.Now().Add(c.ReadTimeout))
if err != nil {
return 0, err
}
return c.Conn.Read(b)
}
func (c *Conn) Write(b []byte) (int, error) {
err := c.Conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
if err != nil {
return 0, err
}
return c.Conn.Write(b)
}