这是我的实际代码:
func cURL(cURL string, follow bool) (*string, error) {
var err error
var resp *http.Response
var req *http.Request
var u *url.URL
if u, err = url.Parse(cURL); nil != err {
if logLevel >= 30 {
log.Print("ERROR: ", err)
}
return nil, err
}
if req, err = http.NewRequest("GET", u.Scheme+"://"+u.Host+u.Path, nil); err != nil {
if logLevel >= 40 {
log.Print("ERROR: ", err)
}
return nil, err
}
req.URL.RawQuery = u.RawQuery
client := &http.Client{
Timeout: 3 * time.Second, //timeout connexion
}
if resp, err = client.Do(req); nil != err {
if logLevel >= 50 {
log.Print("ERROR: ", err)
}
return nil, err
}
defer resp.Body.Close()
var body []byte
if body, err = ioutil.ReadAll(resp.Body); nil != err {
if logLevel >= 30 {
log.Print("ERROR: ", err)
}
return nil, err
}
var html string
html = string(body)
return &html, nil
}
Run Code Online (Sandbox Code Playgroud)
同时在终端中打印此错误,我想隐藏它:
2017/09/29 18:19:28 Unsolicited response received on idle HTTP channel starting with "HTTP/1.0 408 Request Time-out\r\nServer: AkamaiGHost\r\nMime-Version: 1.0\r\nDate: Fri, 29 Sep 2017 16:18:21 GMT\r\nContent-Type: text/html\r\nContent-Length: 218\r\nExpires: Fri, 29 Sep 2017 16:18:21 GMT\r\n\r\n<HTML><HEAD>\n<TITLE>Request Timeout</TITLE>\n</HEAD><BODY>\n<H1>Request Timeout</H1>\nThe server timed out while waiting for the browser's request.<P>\nReference 
Run Code Online (Sandbox Code Playgroud)
我想隐藏此错误,而不是在终端中打印,我该怎么做?我哪里错了?如果有特定关键字,我使用此功能检查大型列表网址,该列表真的很大 5000 万个网址。
该消息来自http.Transport内部http.Client,特别是这里
log.Printf("Unsolicited response received on idle HTTP channel starting with %q; err=%v", buf, peekErr)
Run Code Online (Sandbox Code Playgroud)
不幸的是,与它不同的是,http.Server它有一个ErrorLog用于覆盖默认记录器的字段,http.Transport它总是写入标准记录器。
要防止打印消息,您可以在 1.16 之前使用log.SetOutput(io.Discard)或。log.SetOutput(ioutil.Discard)请记住,这将丢弃写入标准记录器的所有内容。正如 JimB 提到的,如果您仍然想在其他地方登录,您可以创建一个自定义记录器。