为什么 http 请求错误会停止我的应用程序?

我确实通过 http 客户端发送请求,但是它在第一次迭代后停止。我没有看到任何恐慌,所以不明白会发生什么。


func sending() {

    var defaultTransport http.RoundTripper = &http.Transport{

        Proxy: nil,

        DialContext: (&net.Dialer{

            Timeout:   10 * time.Second,

            KeepAlive: 30 * time.Second,

        }).DialContext,

        MaxIdleConns:          30,

        IdleConnTimeout:       90 * time.Second,

        TLSHandshakeTimeout:   15 * time.Second,

        ExpectContinueTimeout: 1 * time.Second,

    }


    client := &http.Client{Transport: defaultTransport}


    var buf bytes.Buffer


    g := gzip.NewWriter(&buf)

    g.Write([]byte(messageToSend))

    g.Close()


    req, err := http.NewRequest("POST", "https://xxxxxxxx.xxx/xxxxxxx", bytes.NewReader(buf.Bytes()))

    if err != nil {

        log.Fatal(err)

    }

    req.Header.Set("Content-Type", "text/plain")

    req.Header.Set("Content-Encoding", "gzip")


    println("request sent")


    resp, err := client.Do(req)


    println("response got")

    if err != nil {

        log.Fatal(err)

    } else {

        resp.Body.Close()


    }


}


func main() {


    for i:=1;i<10;i++{

        fmt.Println("Started",i)

        sending()

        fmt.Println("Finished",i)

    }


}

日志:


Started 1

request sent

2020/12/09 18:30:52 Unsolicited response received on idle HTTP channel starting with "\n"; err=<nil>

response got

2020/12/09 18:30:53 Post "https://xxxx.xxx/xxxx": net/http: HTTP/1.x transport connection broken: too many transfer encodings: ["chunked" "chunked"]

在此条目之后,应用程序停止并且不执行下一轮。


红颜莎娜
浏览 160回答 1
1回答

紫衣仙女

log.Fatal按照文档中的说明关闭服务器:Fatal 等价于 Print(),然后调用 os.Exit(1)。log.Print如果您只想记录错误,请改用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go