无需发起CURL调用的URL存在性及重定向检测方案查询
可直接使用的检测工具及高效实现方案
现成命令行工具
你可以直接用这些常见的自带/易安装工具,不需要额外写代码完成检测:
curl本身就支持原生重定向检测,直接用以下命令即可输出最终跳转地址和响应状态码:
其中curl -Ls -o /dev/null -w '%{url_effective} %{http_code}' 待检测URL-L参数会自动跟踪重定向链,-w参数指定输出最终访问地址和状态码,你可以根据返回的状态码判断URL是否存在,直接拿到重定向后的最终地址。- 如果你需要批量检测,也可以用
wget的蜘蛛模式,不会下载完整响应内容,仅检测服务端响应:
输出结果中会直接标注URL是否存在,以及完整的跳转链所有地址。wget --spider --max-redirect=10 待检测URL
无需重复发起网络请求的方案
如果你需要反复检测相同URL的状态,可以自行搭建本地缓存层减少重复请求:
- 本地维护键值对缓存,key为待检测URL,value存储检测结果(存在状态、重定向地址、缓存过期时间),相同URL在缓存有效期内可以直接返回历史结果,不需要发起新的网络请求,缓存过期后再重新检测更新结果即可。
- 缓存过期时间可以根据你对数据时效性的要求调整,对URL状态变化不敏感的场景可以设为24小时,敏感场景可以设为1小时甚至更短。
- 如果是团队共用的场景,可以用Redis这类分布式缓存存储检测结果,所有成员都可以复用之前的检测数据,避免全团队重复发起相同的网络请求。
更高效的检测技巧
如果需要批量检测大量URL,比普通GET请求更高效的方式是用HEAD请求替代GET请求,服务端只会返回响应头不会返回响应体,耗时和带宽占用可以减少80%以上,绝大多数服务端对HEAD请求返回的状态码、重定向Location头和GET请求完全一致。
注意:少部分服务端会禁用HEAD请求,遇到这种情况再降级为GET请求即可。
内容的提问来源于stack exchange,提问作者vish4071
相关产品推荐
相关产品推荐

