【问题标题】:curl exit status code issue while using authentication使用身份验证时出现 curl 退出状态代码问题
【发布时间】:2016-05-05 07:03:27
【问题描述】:

我正在编写一个脚本来检查是否可以使用 curl 从远程服务器下载文件。如果下载文件有问题或文件不存在,脚本将报告。我正在使用以下代码 sn-p:

curl --fail -u "$USERNAME:$PASSWORD" --remote-name "$HOST/$FILEPATH"
if [ $? -ne 0 ]
then
echo "There is some error in Downloading file from $HOST";
else
echo "Download success";
fi

但我总是得到退出状态代码为 0。这是因为 curl 总是下载文件(即使文件不存在),您可以在该文件中找到实际的错误消息。

那么我怎样才能得到真正的 curl 退出状态码(22 文件未找到)?

【问题讨论】:

    标签: bash curl


    【解决方案1】:

    --fail 在 http 协议的情况下将返回错误代码 22 并且 对于其他协议,例如 ftp,返回代码可能不同。见下文:

    me@udistro:~$ curl --fail ftp://ftp.redhat.com/redhat/brms/6.2.0/en/source/MD5 
    curl: (78) RETR response: 550
    me@udistro:~$ echo $?
    78
    

    但正如手册页所述:

    此方法不是故障安全的,并且在某些情况下 不成功的响应代码会漏掉,尤其是当 涉及身份验证(响应代码 401 和 407)。

    作为一个起点,你可以试试这个:

    curl --fail -u "$USERNAME:$PASSWORD" --remote-name "$HOST/$FILEPATH"
    var=$?
    
    if [ $var -ne 78 ] && [ $var -ne 22 ]
    then
        echo "Success"
    else
        echo "Failed"
    fi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      • 2023-03-12
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多