首页 >后端开发 >Golang >如何在 Go 中查询 URL 而不遵循重定向?

如何在 Go 中查询 URL 而不遵循重定向?

Susan Sarandon
Susan Sarandon原创
2024-11-24 20:13:46791浏览

How to Query URLs in Go without Following Redirects?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn