Curl GET位于CMD行上,文件名中带有空格

Curl GET位于CMD行上,文件名中带有空格,curl,cmd,Curl,Cmd,试图通过CMD行下载文件,但文件名中有空格,无法下载 curl --request GET -v --user user$site:password https://www.whatever.com/uploads/Filename With Spaces.csv > /users/kanye_west/desktop/FilenameWithSpaces.csv 尝试用反斜杠转义空格已无效将URL置于引号中 curl --request GET -v --user user$site:

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

curl --request GET -v --user user$site:password https://www.whatever.com/uploads/Filename With Spaces.csv > /users/kanye_west/desktop/FilenameWithSpaces.csv
尝试用反斜杠转义空格已无效

将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上不能用作转义字符,因为它们是目录分隔符的原始形式。

这里有一个便宜的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
}
urlencode(){
#URL编码
局部长度=“${1}”
for((i=0;i
然后,您可以使用此函数在传递到
curl
之前转换URL


curl--request GET-v--user$site:password$(urlencode)https://www.whatever.com/uploads/Filename 使用Spaces.csv“>/users/kanye_west/desktop/FilenameWithSpaces.csv

将每个空间替换为%20

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

我在尝试时遇到http 400错误。。该命令适用于没有空格的文件,但如果URL错误,则会出现
404
错误。所以问题可能出在其他地方。url中的空格没有指定为空格。使用ASCII十六进制代码来指定这一点。您的URL应该是
”https://www.whatever.com/uploads/Filename%20With%20Spaces.csv“
,其中
%20
表示空格。有效的URI(RFC3986)不能包含空格,但如果用双引号括住URL,它可能仍然有效。…@DanielStenberg-即使使用双引号,URL中也不允许有空格。URL必须进行编码以容纳空格。如果使用双引号,则curl将接受带有空格的URL
curl
将按原样传递空格
,web服务将不知道如何处理空格。因此需要对空间进行编码。