亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang HTTP Get 請求未解析某些 URL

Golang HTTP Get 請求未解析某些 URL

Go
拉風的咖菲貓 2023-02-06 11:24:17
我試圖建立某種網站狀態檢查器。我發現對于https://www.hetzner.com之類的某些 URL,golang HTTP get 請求未得到解決并永遠掛起。但是,如果我們 curl,則相同的 URL 會起作用。戈朗這里沒有拋出錯誤。它只是掛在http.Get上func main() {  resp, err := http.Get("https://www.hetzner.com")  if err != nil {        fmt.Println("Error while retrieving site", err)  }  defer resp.Body.Close()  body, err := io.ReadAll(resp.Body)    if err != nil {      fmt.Println("Eroor while reading response body", err)  }  fmt.Println("RESPONSE", string(body))}卷曲我在運行以下命令時得到響應。curl https://www.hetzner.com可能是什么原因?我如何從 golang HTTP 解決這個問題?
查看完整描述

1 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

您可以通過指定 HTTP User-Agent Header 來解決您的具體情況:


import (

    "fmt"

    "io"

    "net/http"

)


func main() {

    client := &http.Client{}


    req, err := http.NewRequest("GET", "https://www.hetzner.com", nil)

    if err != nil {

        fmt.Println("Error while retrieving site", err)

    }


    req.Header.Set("User-Agent", "Golang_Spider_Bot/3.0")


    resp, err := client.Do(req)

    if err != nil {

        fmt.Println("Error while retrieving site", err)

    }


    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)

    if err != nil {

        fmt.Println("Eroor while reading response body", err)

    }

    fmt.Println("RESPONSE", string(body))

}

注意:許多其他主機會因為他們的一些安全規則而拒絕來自您的服務器的請求。一些想法:

  • 空的或類似機器人的 User-Agent HTTP 標頭

  • 您的 IP 地址所在的位置。例如,美國的在線商店不需要處理來自俄羅斯的請求。

  • 供應商的自治系統或 CIDR。由于其居民的大量惡意活動,一些 ASN 完全被黑洞。

注 2:許多現代網站前面都有 DDoS 保護或 CDN 系統。如果 Cloudflare 保護您的目標網站,您的 HTTP 請求將被阻止,盡管狀態代碼為 200。要處理此問題,您需要構建能夠呈現基于 JavaScript 的網站并添加一些腳本來解析驗證碼的東西。

此外,如果您在短時間內檢查大量網站,您將被您的 DNS 服務器阻止,因為它們有一些內置速率限制。在這種情況下,您可能需要查看 massdns 或類似的解決方案。


查看完整回答
反對 回復 2023-02-06
  • 1 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號