상태 및로드 타임에 대해 http/s 엔드 포인트를 확인하는 코드 조각이 있습니다. 그런 다음 최상위 레벨 페이지 1 레벨 1 레벨을 검사 할 때마다 페이지가 참조하는 모든 항목이 200을로드하는지 확인하십시오. net/http vs curl - curl is not는 어디에서 시간 초과됩니까?
은 (내가 50 최상위 페이지를 확인하고, 각 최상위 페이지 8 개 링크의 평균이)는 좀 goroutines (25)와 waitgroup을 통해 최고 수준의 페이지를 확인. 레벨 1 페이지에서 나는 다른 gouroutines + waitgroup을 시도한 다음 곧장 forloop (그냥 비교)를 시도했다.
이 레벨 1 페이지에서 "머리글 대기 중 CLient.Timeout 초과"오류가 많이 발생합니다. 그런 URL을 가져 와서 컬링으로 즉시 다시 시도하면, 완벽하게로드됩니다 (말림으로)
헤더의 시간 초과 페이지는 js, png, gif, html이 섞여 있습니다. 내가 수동으로 그것을 말아 때 완벽하게 작동하지만, 어떻게 든 이동에서 큰 시간을 실패하는 일반 물건.
다음은 페이지 내용을 가져 오기 위해 호출하는 함수입니다.
func (t Target) getContents(timeout int64) (string, string, string) {
var contents []byte
statusCode := "0"
errorLabel := "no_error"
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
// Dial: (&net.Dialer{
// Timeout: 15 * time.Second,
// KeepAlive: 15 * time.Second,
// }).Dial,
TLSHandshakeTimeout: 10 * time.Second,
ResponseHeaderTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
client := &http.Client{Transport: tr, Timeout: time.Duration(timeout) * time.Second}
url := t.getPageURL()
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Error("Error while creating the request| ", err)
errorLabel = "cant_create_request"
} else {
//req.Header.Add("cache-control", "no-cache")
if t.Agent != "" {
req.Header.Set("User-Agent", t.Agent)
}
if t.SourceIP != "" {
req.Header.Set("X-Forwarded-For", t.SourceIP)
}
if t.Host != "" {
req.Header.Set("Host", t.Host)
req.Host = t.Host
}
response, err := client.Do(req)
if err != nil {
log.Error("Error while doing the request| ", err.Error())
errorLabel = "cant_do_request"
} else {
defer response.Body.Close()
statusCode = strconv.Itoa(response.StatusCode)
contents, err = ioutil.ReadAll(response.Body)
if err != nil {
log.Error("Error while reading the response| ", err)
errorLabel = "cant_read_response"
}
}
}
return string(contents), statusCode, errorLabel
}
여기까지가는 것은 충분하지 않지만 ipv6 네트워크가 깨진 경우에는 이와 같이 작동합니다. 어쨌든 다이얼러에서'DualStack'을 활성화시켜야합니다. 그러면이 문제를 해결할 수 있습니다. – JimB
아, 그리고 연결을 누설하게 될'http.Transport'를 버리지 마십시오. – JimB
내 사회자가 내 의견을 삭제 한 것으로 보입니다. 예, 사무실 네트워크가 잘못 구성되어 희생되었습니다. "적절한"위치에 배치되면 수출업자는 더 이상 시간 초과하지 않습니다. –