Golang Http获取请求非常慢

时间:2019-01-25 10:29:20

标签: performance http go get request

在Golang中使用简单的HTTP Get Request遇到一个非常奇怪的问题。

Golang中对 https://www.alltron.ch/json/searchSuggestion?searchTerm=notebook 的每个请求大约需要6-8秒(!)

如果在 Chrome,Postman或Powershell 中触发了相同的请求,则所需时间不到一秒钟。

有人知道为什么会这样吗?

我的代码:

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    client := &http.Client{}

    req, _ := http.NewRequest("GET", "https://www.alltron.ch/json/searchSuggestion?searchTerm=notebook", nil)

    response, err := client.Do(req)
    if err != nil && response == nil {
        log.Fatalf("Error on request. %v", err)
    }
    defer response.Body.Close()

    body, err := ioutil.ReadAll(response.Body)
    if err != nil {
        log.Fatalf("Couldn't get response body. %v", err)
    }

    fmt.Print(string(body))
}

2 个答案:

答案 0 :(得分:3)

您要访问的网站位于Akamai CDN后面:

$ dig www.alltron.ch 
...
www.alltron.ch.         152     IN      CNAME   competec.botmanager.edgekey.net.
competec.botmanager.edgekey.net. 7052 IN CNAME  e9179.f.akamaiedge.net.
e9179.f.akamaiedge.net. 162     IN      A       2.20.176.40

Akamai向其客户提供不是浏览器的Web客户端检测,以便客户可以使僵尸程序远离或降低僵尸程序的速度。

Strange CURL issue with a particular website SSL certificateScraping attempts getting 403 error可以看出,这种类型的检测主要关心的是拥有Accept-Language报头,具有值为{{1}的Connection报头},并有一个与Keep-Alive相匹配的User-Agent

这意味着以下代码更改会导致立即响应:

Mozilla/...

仍然,该网站显然不喜欢漫游器,您应该遵守这些愿望,并且不要过分强调该网站(例如进行大量信息收集)。而且,由Akamai完成的僵尸程序检测可能会更改,恕不另行通知,即,即使此代码现在解决了问题,将来也可能不再起作用。如果许多客户端绕过了僵尸程序检测,则此类更改将尤其如此。

答案 1 :(得分:-1)

尝试禁用Chrome中的缓存并与golang进行比较