如何用cURL跟随重定向但忽略302临时跳转?
解决cURL跟随重定向但跳过302响应的问题
cURL本身没有直接提供“仅忽略302重定向”的单一参数,但可以通过脚本逻辑结合cURL的参数实现需求,以下是两种可行方案:
方案1:先检查响应码,再决定是否跟随重定向
先发送HEAD请求获取目标URL的响应码,若响应码不是302,则执行带-L的下载命令;若为302,则终止操作避免跳转到无效地址。
示例脚本片段:
URL="https://go.microsoft.com/fwlink/p/?linkid=2" # 获取响应码 RESPONSE_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$URL") if [ "$RESPONSE_CODE" != "302" ]; then # 非302响应,跟随重定向下载 curl -LOJ "$URL" else echo "检测到302重定向,终止下载" fi
方案2:利用cURL的--location配合自定义重定向规则
通过--write-out捕获最终跳转后的响应信息,结合逻辑判断是否是因302跳转至无效地址(比如搜索引擎)。这种方式适合你明确无效跳转目标特征的场景:
URL="https://go.microsoft.com/fwlink/p/?linkid=2" # 执行下载并捕获最终URL FINAL_URL=$(curl -s -L -w "%{url_effective}" -o temp_file "$URL") # 判断最终URL是否包含搜索引擎特征(比如bing.com) if [[ "$FINAL_URL" == *"bing.com"* ]]; then # 无效跳转,删除临时文件并提示 rm temp_file echo "检测到跳转至搜索引擎,终止下载" else # 有效下载,保留文件 echo "文件下载完成" fi
补充说明
- 方案1更直接针对302响应码,适合需要排除所有302跳转的场景;
- 方案2更灵活,适合部分302跳转合法有效,仅需排除跳转到特定无效地址的情况。
内容的提问来源于stack exchange,提问作者artomason
相关产品推荐
相关产品推荐

