gpt4 book ai didi

go - 为什么Golang不能下载某些网页?

转载 作者:IT王子 更新时间:2023-10-29 01:23:07 25 4
gpt4 key购买 nike

我想下载 Fantasy Football Data 以在 Go 中进行分析,但是当我尝试从 this api page 下载时然后我得到一个空的响应,即使代码适用于其他网站,例如this api page

最小复制,输出一个空数组。

package main

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

const AllPlayerData = "https://fantasy.premierleague.com/drf/bootstrap-static"

func main() {
downloadAllData()
}

func downloadAllData() {
client := &http.Client{
Timeout: 20 * time.Second,
}

response, err := client.Get(AllPlayerData)
if err != nil {
fmt.Println("Unable to download player data.")
return
}

body, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println("Failed to read response")
return
}

defer response.Body.Close()

fmt.Println(body)
}

同一网页在 Python 中下载正常:

import requests
url = "https://fantasy.premierleague.com/drf/bootstrap-static"
r = requests.get(url)
print(r.content)

我认为这与例如Ajax calls因为在 Chrome 中查看网络请求不会显示任何超出页面加载本身的内容

最佳答案

他们正在对用户代理进行某种验证,以下代码有效:

package main

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

const AllPlayerData = "https://fantasy.premierleague.com/drf/bootstrap-static"

func main() {
downloadAllData()
}

func downloadAllData() {
client := &http.Client{
Timeout: 20 * time.Second,
}

request, err := http.NewRequest(http.MethodGet, AllPlayerData, nil)
if err != nil {
fmt.Println("Unable to create request.")
return
}
request.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36")
response, err := client.Do(request)
if err != nil {
fmt.Println("Unable to download player data.")
return
}

body, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println("Failed to read response")
return
}

defer response.Body.Close()

fmt.Println(string(body))
}

关于go - 为什么Golang不能下载某些网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51619910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com