如何在httr重定向时不传递Authorization请求头
httr重定向时携带认证头导致401的解决方案探讨
该问题已在相关技术社区及项目仓库中提及并跟进,核心触发场景如下:
- 使用httr向需要
Authorization请求头的URL发起GET请求 - 目标API返回重定向响应,指向一个无需认证的预签名URL
- httr自动跟随重定向时,会将原请求的
Authorization头一并发送到新URL - 由于原请求的Bearer令牌对重定向URL无效,最终返回401未授权状态码
这类重定向时误携带认证头的问题,在浏览器等客户端场景中也较为常见。
目前可以通过手动拆分重定向流程的方式解决问题(以下示例为HTTP转HTTPS的重定向场景),但需要编写独立于httr自动跟随逻辑的代码。现提出疑问:httr是否支持直接配置以避免此类问题,还是编写自定义包装器为最优实践?
手动处理重定向的示例代码
library(httr) # 确保curl版本高于7.58(需满足相关安全规范要求) curl::curl_version()$version # 发送请求时禁用自动跟随重定向 resp <- GET( "http://github.com", config(followlocation = FALSE), authenticate("user", "pwd", type = "basic") ) # 从响应头中提取重定向目标URL redirected_url <- headers(resp)[["location"]] # 不带认证信息发起重定向后的请求 resp_redirect <- GET(redirected_url)
对应控制台输出
> curl::curl_version()$version [1] "7.60.0" > resp Response [http://github.com/] Date: 2022-08-24 09:11 Status: 301 Content-Type: <unknown> <EMPTY BODY> > redirected_url [1] "https://github.com/" > resp_redirect Response [https://github.com/] Date: 2022-08-24 09:12 Status: 200 Content-Type: text/html; charset=utf-8 Size: 301 kB
内容的提问来源于stack exchange,提问作者StephGC
相关产品推荐
相关产品推荐

