如何捕获经base64管道传输的cURL下载失败情况
解决cURL下载并Base64编码后无法判断操作状态的问题
判断cURL下载是否成功
默认管道命令只会返回最后一个命令的退出码,所以即使curl下载失败,只要base64正常运行,整个命令的退出码还是0。可以用以下两种方式获取curl的真实状态:
启用
pipefail选项,让管道的退出码等于第一个失败命令的退出码:set -o pipefail output=$(curl -L -o - "$url" | base64) # 检查整体退出码 if [ $? -eq 0 ]; then echo "下载及Base64编码均成功" else echo "下载或编码操作失败" fi用bash的
PIPESTATUS数组分别获取curl和base64的退出码:output=$(curl -L -o - "$url" | base64) curl_exit=${PIPESTATUS[0]} base64_exit=${PIPESTATUS[1]} if [ $curl_exit -eq 0 ]; then echo "文件下载成功" if [ $base64_exit -eq 0 ]; then echo "Base64编码成功" else echo "Base64编码失败,错误码:$base64_exit" fi else echo "文件下载失败,错误码:$curl_exit" fi
验证变量中内容是否正确
检查Base64格式合法性:Base64编码后的内容长度必须是4的倍数,可通过以下命令验证:
if [ $(( ${#output} % 4 )) -eq 0 ]; then echo "编码内容符合Base64格式规范" else echo "编码内容可能存在异常" fi解码后验证内容:将变量中的Base64内容解码,通过文件大小、哈希值等方式对比原文件(若可获取):
# 解码到文件 echo "$output" | base64 -d > downloaded_decoded # 对比原文件与解码文件的MD5哈希 # md5sum original_file downloaded_decoded
内容的提问来源于stack exchange,提问作者user2141238
相关产品推荐
相关产品推荐

