Curl GET位于CMD行上,文件名中带有空格
试图通过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:
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将接受带有空格的URLcurl
将按原样传递空格,web服务将不知道如何处理空格。因此需要对空间进行编码。