我正在为重定向脚本编写基准测试。
我希望程序查询某些重定向到AppStore的URL。但是我不希望下载AppStore页面。我只想记录重定向URL或错误。
我该如何告诉转到查询URL而无需第二次重定向查询?
更新
这两个答案都是正确的,但是:
我尝试了两种解决方案。我正在做基准测试。我使用10-500个go例程运行1个或多个go进程。他们循环查询URL。我的服务器也是用go编写的。它每秒报告一次请求数。
http.DefaultTransport.RoundTrip
然后下降到每秒0-5个查询,queryies脚本开始出现如下错误
dial tcp IP:80: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
我猜它重用了已关闭的连接。
CheckRedirect field
client
这就是为什么我要标记第二种解决方案来回答我的问题。但是对于我的研究而言,每个查询都是一个新的连接非常重要。如何保证第二种解决方案?
为了完整起见,您 可以 使用http.Client和不遵循重定向。http.Client具有CheckRedirect场这是一个功能。在进行任何重定向之前都将调用它。
http.Client
CheckRedirect
如果此函数返回错误,httpClient.Do(...)则将 不 遵循重定向(请参见doFollowingRedirects()Go的源代码中的函数),而将返回错误(其具体类型为url.Error,并且其URL字段将为重定向到URL,也就是Location标头值) ,请参见此代码)。
httpClient.Do(...)
doFollowingRedirects()
url.Error
URL
您可以查看我的gocrawl库以获取此用法的具体示例。