使用Mojo::UserAgent能否获取重定向后的最终URL?
获取Mojo::UserAgent重定向后最终URL的方案
配置max_redirects启用自动重定向后,不需要引入额外依赖或自定义逻辑,请求完成后直接从事务对象中就能提取最终落地的URL地址。
基础实现代码
# 初始化UA,配置最多3次自动重定向 my $ua = Mojo::UserAgent->new->max_redirects(3); # 发起请求获取事务对象 my $tx = $ua->get('https://初始请求地址'); # 提取所有重定向完成后的最终绝对URL my $final_url = $tx->req->url->to_abs;
实现说明
- Mojo::UserAgent自动处理重定向的过程中,会同步更新事务对象内的请求属性,每完成一次跳转,内部绑定的请求对象就会更新为当前跳转目标地址对应的请求实例,请求全部结束后读取的
$tx->req->url就是最终落地地址 - 追加
->to_abs方法是为了把可能存在的相对路径URL补全为带协议、域名的完整绝对地址,避免返回相对路径结果影响后续使用
扩展:获取完整重定向链路
如果需要查看每一步的跳转详情,可以直接读取响应对象自带的重定向记录列表,不需要手动埋点跟踪:
# 遍历所有中间跳转的事务记录 for my $redirect_tx ($tx->redirects->@*) { say "当前跳转源地址: " . $redirect_tx->req->url->to_abs; say "本次跳转响应状态码: " . $redirect_tx->res->code; say "本次跳转目标地址: " . $redirect_tx->res->headers->location; }
注意事项
如果设置的max_redirects阈值小于实际重定向跳数,请求会在达到次数上限后终止,此时读取到的URL是最后一次成功跳转后的地址,并非最终落地页,可根据实际业务场景调整重定向次数阈值。
内容的提问来源于stack exchange,提问作者simone
相关产品推荐
相关产品推荐

