【问题标题】:Not getting response from HTTP Get Method未从 HTTP Get 方法获得响应
【发布时间】:2020-06-16 10:44:07
【问题描述】:

在go中实现了从给定URL获取信息的逻辑,问题是net/http的响应是空的。

package main

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

func main() {
    resp, err := http.Get("https://azure.microsoft.com/en-us/")
    if err != nil {
        // handle error
    }
    body, err := ioutil.ReadAll(resp.Body)
    bodyString := string(body)
    fmt.Print(bodyString)
    fmt.Printf("%v %v", body, err)
}

输出:它返回空切片而不是返回 HTML 内容

[]byte{} <nil>

我使用的是 Go 版本 1.14.3。

【问题讨论】:

  • 我在几个不同的主机上尝试过,效果很好。
  • 感谢@phonaputer 的快速响应,是的,我同意它在不同的主机上工作,但不适用于 azure

标签: go web-scraping


【解决方案1】:

当您设置 User-Agent 标头时,它似乎正在工作:

package main

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

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://azure.microsoft.com/en-us/", nil)
    req.Header.Add("User-Agent", "Mozilla")
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
    }
    body, err := ioutil.ReadAll(resp.Body)
    bodyString := string(body)
    fmt.Print(bodyString)
}

【讨论】:

  • @Bertrand Martel 为什么没有User-Agent 就无法工作?
  • @MahmudulHaque 很可能服务器会检查请求中是否存在此标头
猜你喜欢
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
相关资源
最近更新 更多