2016-01-22 29 views
0

尝试通过CMD行下载文件,但文件名中有空格以防止下载。在CMD行上使用文件名中的空格进行GET处理

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

试图逃避与反斜线\已经空格无济于事

+0

空间没有被指定为一个空间替换每个空间。使用ASCII十六进制代码指定。您的网址应该是'“https://www.whatever.com/uploads/Filename%20With%20Spaces.csv”',其中'%20'表示空格。 – alvits

+0

一个有效的URI(RFC3986)不能包含空格,但如果你用双引号括起了URL,它可能仍然有效...... –

+0

@DanielStenberg - 即使使用双引号,空格在URL中也是不允许的。必须对URL进行编码以适应空间。 – alvits

回答

-1

把网址中的引号。

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上的逃逸系统字符。

+0

尝试时出现http 400错误..该命令适用于没有空格的文件,虽然 – bennyharassi

+0

如果URL错误,将会出现404错误。所以问题可能在别的地方。 – Barmar

0

这是一个便宜的技巧来编码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之前使用此函数转换您的网址。

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

0

由%的URL 20个

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