1 回答
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 或类似的解决方案。
- 1 回答
- 0 关注
- 138 浏览
添加回答
举报