Golang Http Получить запрос очень медленно - PullRequest
0 голосов
/ 25 января 2019

У меня очень странная проблема с простым запросом HTTP Get в Golang.

Каждый запрос в Golang на https://www.alltron.ch/json/searchSuggestion?searchTerm=notebook требует около 6-8 секунд (!)

Если тот же запрос сработал в Chrome, с Почтальоном или с 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 голосов
/ 25 января 2019

Сайт, к которому вы пытаетесь получить доступ, находится за CDN Akamai:

$ 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 предлагает своим клиентам обнаружение веб-клиентов, которые не являются браузерами, чтобы клиенты могли скрывать ботов или замедлять их.

Как видно из Странная проблема CURL с определенным сертификатом SSL для веб-сайта и Попытки очистки с ошибкой 403 Этот тип обнаружения в основном заботится о наличии заголовка Accept-Language, имеющего заголовок Connection со значением Keep-Alive и User-Agent, который соответствует Mozilla/....

Это означает, что следующие изменения кода приведут к немедленному ответу:

req, _ := http.NewRequest("GET", "https://www.alltron.ch/json/searchSuggestion?searchTerm=notebook", nil)
req.Header.Set("Connection","Keep-Alive")
req.Header.Set("Accept-Language","en-US")
req.Header.Set("User-Agent","Mozilla/5.0")

Тем не менее, сайт, очевидно, не любит ботов, и вы должны придерживаться этих пожеланий и не слишком подчеркивать сайт (например, делать много очистки информации). Кроме того, обнаружение ботов, выполненное Akamai, может измениться без предварительного уведомления, т. Е. Даже если этот код устраняет проблему сейчас, он может больше не работать в будущем. Такие изменения будут особенно актуальны, если многие клиенты обходят обнаружение ботов.

0 голосов
/ 25 января 2019

попробуйте отключить кеш в вашем chrome и сравнить с golang

...