我有一些网址,其中的查询参数中有空格。我想在卷曲中使用它,例如
curl -G "http://localhost:30001/data?zip=47401&utc_begin=2013-8-1 00:00:00&utc_end=2013-8-2 00:00:00&country_code=USA"
发出
Malformed Request-Line
根据我的理解,o / p是由于查询参数中存在空间。
在提供给curl命令之前,是否有任何方法可以自动对URL进行编码?
我有一些网址,其中的查询参数中有空格。我想在卷曲中使用它,例如
curl -G "http://localhost:30001/data?zip=47401&utc_begin=2013-8-1 00:00:00&utc_end=2013-8-2 00:00:00&country_code=USA"
发出
Malformed Request-Line
根据我的理解,o / p是由于查询参数中存在空间。
在提供给curl命令之前,是否有任何方法可以自动对URL进行编码?
Answers:
curl
内部支持url编码--data-urlencode
:
$ curl -G -v "http://localhost:30001/data" --data-urlencode "msg=hello world" --data-urlencode "msg2=hello world2"
-G
还需要将数据附加到URL。
跟踪头
> GET /data?msg=hello%20world&msg2=hello%20world2 HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu)
> Host: localhost
> Accept: */*
"msg1=Hello&msg2=World"
?这将对&
参数之间的编码进行编码,这将意味着将错误的内容发送到服务器
--data-urlencode
参数,每个键值对一个。
curl -G "$( echo "$URL" | sed 's/ /%20/g' )"
$URL
您要在其上进行翻译的网址在哪里。
URL中还可以有多种翻译(编码)类型,因此您可能需要执行以下操作:
curl -G "$(perl -MURI::Escape -e 'print uri_escape shift, , q{^A-Za-z0-9\-._~/:}' -- "$URL")"
代替。
echo "$URL" | sed 's/ /%20/'
如果%
URL中包含字符,将无法正确执行操作。此外,空间通常编码为+
(和+
如%2b
)。我推荐Perl解决方案,它是可靠的。
sed 's/ /%20/g'
如果您有多个翻译空间...
msg = '='
呢?