在 Go 中查询 URL 而不触发自动重定向
在本文中,我们解决了在 Go 中查询 URL 而不触发自动重定向的问题。这通常是出于基准测试目的或当您只需要记录重定向 URL 或错误时所必需的。
解决方案 1:使用 http.DefaultTransport.RoundTrip
创建 http .像往常一样请求对象。不要将其传递给 http.Client,而是使用 http.DefaultTransport.RoundTrip() 发出请求。这会绕过 http.Client 的内置重定向处理。
import "net/http" func QueryURLWithoutRedirect(url string) (*http.Response, error) { req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } return http.DefaultTransport.RoundTrip(req) }
解决方案 2:使用 CheckRedirect 禁用重定向
创建一个设置了 CheckRedirect 字段的 http.Client为零。这会将客户端配置为不遵循重定向。
import "net/http" func QueryURLWithoutRedirect(url string) (*http.Response, error) { client := &http.Client{ CheckRedirect: nil, } return client.Get(url) }
进一步注意事项
虽然两种解决方案都提供了所需的功能,但第一种方法可能会在高负载下遇到性能问题,因为它可能会重用过早关闭的连接。
要确保每个查询使用第二种方法打开一个新连接,您可以为循环中的每个请求创建一个新的 http.Client。然而,这可能不是必要的,因为 Go 在一定时间后会自动关闭空闲连接。
最终,方法的选择取决于您的具体性能要求以及您在现实场景中期望的行为。
以上是如何在 Go 中查询 URL 而不遵循重定向?的详细内容。更多信息请关注PHP中文网其他相关文章!