为了账号安全,请及时绑定邮箱和手机立即绑定

返回 503 的 http 请求

返回 503 的 http 请求

Go
慕少森 2022-08-09 20:14:23
为什么 Go 中的 http 请求会返回<html><body><h1>503</h1></body></html>但我可以毫无问题地卷曲网址/数据。例如卷曲 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 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

因此,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

}


查看完整回答
反对 回复 2022-08-09
  • 1 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号