我有一些网址,其中的查询参数中有空格。我想在卷发中使用它,
例如

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?

#1 楼

curl内部支持--data-urlencode的url编码:

$ 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: */*


评论


如果msg ='='怎么办?

–AurélienOoms
2015年10月15日在9:14

从curl文档:请注意,名称部分(在这种情况下为msg)应该已经被URL编码了。您还可以指定--request DELETE之类的名称,它的确是删除方法,而不是GET。不确定订单是否重要。

–费德里科
16 Feb 3'在0:21



@damphat当请求具有两个参数,例如“ msg1 = Hello&msg2 = World”时,会发生什么?这将对参数之间的&进行编码,这意味着将错误的内容发送到服务器

–甘尼希(Ganesh)礼炮
16年7月28日在13:08

@GaneshSatpute:使用多个--data-urlencode参数,每个键值对一个。

–马丁·彼得斯(Martijn Pieters)
16年8月9日在13:04

@MartijnPieters是的。这样可行。感谢你的回答

–甘尼希(Ganesh)礼炮
16年8月10日在6:38

#2 楼

 curl -G "$( echo "$URL" | sed 's/ /%20/g' )"


$URL是要在其上进行翻译的URL。

URL中还可以有多种翻译(编码)类型,因此您可能想做:

curl -G "$(perl -MURI::Escape -e 'print uri_escape shift, , q{^A-Za-z0-9\-._~/:}' -- "$URL")"


代替。

评论


注意echo“ $ URL” |如果URL中包含%个字符,则sed's / /%20 /'不会做正确的事情。另外,空格通常编码为+(和+编码为%2b)。我推荐Perl解决方案,它是可靠的。

–吉尔斯'所以-不再是邪恶的'
13年8月14日在22:02



sed's / /%20 / g'如果您有多个翻译空间...

–sebthebert
2015年2月6日14:45



注意我必须安装Perl URI :: Escape模块。

–buzz3791
18年8月21日在17:48