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