Bash 使用wget发送URL编码的POST请求
以下Bash 使用wget发送URL编码的POST请求,bash,curl,post,wget,Bash,Curl,Post,Wget,以下curl将发送带有url参数的POST请求,该参数将自动进行urlencoded: u="url=http://somewhere.net?param1=val1¶m2=val2" curl -XPOST --data-urlencode "$u" http://example.com 但是,我需要从一个没有 curl已安装 有没有办法通过wget达到同样的效果?$u是否可以由wget或其他可能安装在最小linux上的程序自动进行URL编码?正如@Roadowl的评论所建议
curl
将发送带有url
参数的POST
请求,该参数将自动进行urlencoded:
u="url=http://somewhere.net?param1=val1¶m2=val2"
curl -XPOST --data-urlencode "$u" http://example.com
但是,我需要从一个没有
curl
已安装
有没有办法通过
wget
达到同样的效果?$u
是否可以由wget
或其他可能安装在最小linux上的程序自动进行URL编码?正如@Roadowl的评论所建议的,bash本身可以对数据进行URL编码,wget调用可能如下
wget --post-data=$(printf "url="; urlencode $u) http://example.com
使用来自的urlencode实现
urlencode(){
#URL编码
old_lc_collate=$lc_collate
LC_COLLATE=C
局部长度=“${1}”
for((i=0;i
。。不过,如果bash不喜欢空字节,并且可能不允许在变量中使用空字节,那么可能无法使用空字节
urlencode() {
# urlencode <string>
old_lc_collate=$LC_COLLATE
LC_COLLATE=C
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 '%%%02X' "'$c" ;;
esac
done
LC_COLLATE=$old_lc_collate
}