在CMD行上 curl GET,文件名中有空格

mdfafbf1  于 2022-11-13  发布在  其他
关注(0)|答案(4)|浏览(404)

尝试通过CMD行下载文件,但文件名中有空格,无法下载。

curl --request GET -v --user user$site:password https://www.whatever.com/uploads/Filename With Spaces.csv > /users/kanye_west/desktop/FilenameWithSpaces.csv

已尝试使用反斜杠\转义空格,但无效

ndasle7k

ndasle7k1#

将URL放在引号中。

curl --request GET -v --user user$site:password "https://www.whatever.com/uploads/Filename With Spaces.csv" > /users/kanye_west/desktop/FilenameWithSpaces.csv

反斜杠在Unix上可以使用,但在Windows上不能用作转义字符,因为它们是目录分隔符的原始形式。

o2rvlv0m

o2rvlv0m2#

如果是在Windows批处理文件中,则使用%%20代替空格。由于批处理文件中的%20表示第20个参数。因此,对于编码%,使用%%

v8wbuo2f

v8wbuo2f3#

将每个空格替换为%20

curl --request GET -v --user user$site:password https://www.whatever.com/uploads/Filename%20With%20Spaces.csv > /users/kanye_west/desktop/FilenameWithSpaces.csv
yvfmudvl

yvfmudvl4#

这里有一个简单的技巧来编码url,它不仅仅编码空格。

urlencode() {
    # urlencode <string>

    local length="${#1}"
    for (( i = 0; i < length; i++ )); do
        local c="${1:i:1}"
        case $c in
            [a-zA-Z0-9.~_-:/]) printf "$c" ;;
            *) printf '%%%x' \'"$c" ;;
        esac
    done
}

然后,您可以使用此函数在传递到curl之前转换您的url。
curl --request GET -v --user user$site:password $(urlencode "https://www.whatever.com/uploads/Filename With Spaces.csv") > /users/kanye_west/desktop/FilenameWithSpaces.csv

相关问题