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.