http请求返回503

http请求返回503,http,go,Http,Go,Go中的http请求为什么返回 <html><body><h1>503</h1></body></html> 因此elastic.co可能正在检查用户代理以阻止刮取者刮取他们的站点。一旦没有用户代理头或头意味着你正在自动化流量,他们的机器人检测系统将启动,你将获得503。下面是使用Firefox用户代理的示例代码。一旦你跑起来,你的身体就会像卷发一样 package main import ( "fmt

Go中的http请求为什么返回

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

因此elastic.co可能正在检查用户代理以阻止刮取者刮取他们的站点。一旦没有用户代理头或头意味着你正在自动化流量,他们的机器人检测系统将启动,你将获得503。下面是使用Firefox用户代理的示例代码。一旦你跑起来,你的身体就会像卷发一样

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
}

503是一个很好的状态代码。由服务器自行决定发送哪个状态码。我理解这一点。我是新手,我想知道为什么我可以从url中获取curl/wget数据,但在GO中获取503。简短回答:因为GO代码和curl命令的作用不同。详细回答:如果你不向我们展示你声称有效的curl命令,我们无法告诉你。curl命令只是-curl我为你研究了一下,curl添加了两个标题,网站需要其中一个(或两个)来提供HTML。您可以使用
curl-v找到标题https://.....
但它们是
用户代理
接受
头。将这两个添加到go代码(查看如何向http请求添加头)可以解决您的问题。是的,很抱歉,我遇到的url是,请将example.com作为一个通用示例。我可以curl/w获取数据,但在goohh中执行时得到503,我知道,我没有意识到curl是自动完成的。感谢您的帮助,并教我更多关于GO的http请求。欢迎您
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
}