我试着建立一些网站状态检查器。我发现golang HTTP get请求没有被解析,并且对于一些URL(如**https://www.hetzner.com)永远挂起。但是如果我们使用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 度**
我在运行以下命令时得到响应。
curl https://www.hetzner.com
可能的原因是什么?我如何解决这个问题从golang HTTP?
1条答案
按热度按时间70gysomp1#
您可以通过指定HTTP User-Agent Header来修复特定情况:
**注意:**许多其他主机会拒绝来自您的服务器的请求,因为它们的一些安全规则。一些想法:
**注2:**许多现代网站都有DDoS保护或CDN系统。如果Cloudflare保护您的目标网站,您的HTTP请求将被阻止,尽管状态代码为200。要处理此问题,您需要构建能够渲染基于JavaScript的网站的东西,并添加一些脚本来解析验证码。
另外,如果你在短时间内检查了大量的网站,你会被你的DNS服务器阻止,因为它们有一些内置速率限制。在这种情况下,你可能需要看看massdns或类似的解决方案。