在 Go 中查询不带重定向的 URL
在重定向脚本的基准测试中,需要在不启动自动重定向的情况下查询 URL 。这需要阻止程序下载重定向的内容,同时仍记录重定向 URL 或任何相关错误。
解决方案 1:使用 http.DefaultTransport.RoundTrip
一种方法是利用 http.Request 中的 http.DefaultTransport.RoundTrip() 函数。与 http.Client 不同,Transport 不会自动遵循重定向:
req, err := http.NewRequest("GET", "http://example.com/redirectToAppStore", nil) // ... resp, err := http.DefaultTransport.RoundTrip(req)
但是,此解决方案在高负载场景下可能会遇到性能问题和错误。
解决方案 2:设置CheckRedirect 为 False
或者,您可以修改 http.Client 的 CheckRedirect 字段以禁用自动重定向:
client := &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, } // ... resp, err := client.Get("http://example.com/redirectToAppStore")
此方法可确保性能一致,但不能保证每次查询后关闭连接。
确保连接关闭
要强制关闭连接,您可以为每个请求创建一个新的HTTP客户端:
for i := 0; i < n; i++ { client := &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, } resp, err := client.Get("http://example.com/redirectToAppStore") // ... }
这种方法确保每个查询都使用新的连接,防止由于连接重用而导致的性能问题。
以上是如何在 Go 中查询 URL 而不遵循重定向?的详细内容。更多信息请关注PHP中文网其他相关文章!