http 请求返回 503

时间:2021-02-16 11:50:24

标签: http go

Go 中的 http 请求为什么会返回

<html><body><h1>503</h1></body></html>

但我可以毫无问题地卷曲 url/数据。 例如卷曲https://www.elastic.co/downloads/elasticsearch

示例代码:

func main() {
    url := "https://www.elastic.co/downloads/elasticsearch"
    data := DownloadData(url)
    fmt.Println(data)
}

func DownloadData(url string) string {
    response, err := http.Get(url)
    if err != nil {
        log.Fatal(err)
    }
    defer response.Body.Close()

    data, err := ioutil.ReadAll(response.Body)
    if err != nil {
        log.Fatal(err)
    }
    dir := string(data)

    return dir
}

1 个答案:

答案 0 :(得分:0)

因此,elastic.co 可能正在检查用户代理以阻止抓取工具抓取他们的网站。一旦没有用户代理标头或标头暗示您正在自动化流量,他们的机器人检测系统就会启动,您将收到 503 . 下面是您的代码与使用 Firefox 用户代理的示例。一旦你运行它,你就会得到像 curl 一样的 body。

package main

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

func main() {

    url := "https://elastic.co/downloads/elasticsearch,"
    data := DownloadData(url)
    fmt.Println(data)

}

func DownloadData(url string) string {

    client := &http.Client{}
    request, err := http.NewRequest("GET", url, nil)

    if err != nil {
        log.Fatalln(err)
    }
    request.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0")
    response, err := client.Do(request)
    if err != nil {
        log.Fatal(err)
    }
    defer response.Body.Close()

    data, err := ioutil.ReadAll(response.Body)
    if err != nil {
        log.Fatal(err)
    }
    dir := string(data)

    return dir
}