Post

Shell执行curl带有空格等特殊字符报错问题

Shell执行curl带有空格等特殊字符报错问题

参考:
curl 用法指南
curl 命令,当url中存在匹配条件和空格时如何书写。
shell urlencode编码

前言

在做多台Jenkins通过curl串联时遇到一个问题,就是curl中的参数中带有特殊字符比如空字符串等会报URL rejected: Malformed input to a URL function

1
2
3
4
5
myName="John Doe (Junior) @Dd 中国"
myAge="100"
# 使用-d参数会自带urlencode
myparamOriginStr="name=${myName}&age=${myAge}"
curl -X POST "http://xxx.xxx.xx.xx:8080/job/TestRemote/buildWithParameters?${myparamOriginStr}" --user xxx:11xxxxxxxx7

问题: curl: (3) URL rejected: Malformed input to a URL function

解决方案一:使用curl-d参数

1
2
3
4
5
myName="John Doe (Junior) @Dd 中国"
myAge="100"
# 使用-d参数会自带URLEncode
myparamOriginStr="name=${myName}&age=${myAge}"
curl -d"$myparamOriginStr" -X POST  "http://xxx.xxx.xx.xx:8080/job/TestRemote/buildWithParameters" --user xxx:11xxxxxxxx7

解决方案二:使用perl将参数进行URLEncode

1
2
3
4
5
6
myName="John Doe (Junior) @Dd 中国"
myAge="100"
# 对参数使用perl进行URLEncode
myNameEncoded=$(perl -MURI::Escape -e "print uri_escape('${myName}');")
myparamEncoded="name=${myNameEncoded}&age=${myAge}"
curl -X POST  "http://xxx.xxx.xx.xx:8080/job/TestRemote/buildWithParameters?${myparamEncoded}" --user xxx:11xxxxxxxx7
This post is licensed under CC BY 4.0 by the author.