bash - 使用 wget 发送 urlencoded POST 请求
问题描述
以下curl
将发送一个带有自动 urlencoded 参数的POST
请求:url
u="url=http://somewhere.net?param1=val1¶m2=val2"
curl -XPOST --data-urlencode "$u" http://example.com
但是,我需要从尚未
curl
安装的系统发出此请求。
有没有办法达到同样的效果wget
?可以由或其他可能在最小 linux 安装上的程序$u
自动进行 urlencoded吗?wget
解决方案
正如@Roadowl 在评论中所建议的那样,bash 本身可以对数据进行 urlencode,wget 调用可能看起来像
wget --post-data=$(printf "url="; urlencode $u) http://example.com
使用来自https://gist.github.com/cdown/1163649的urlencode 实现,
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
}
.. 考虑到 bash 不喜欢空字节并且可能不允许它们出现在变量中,空字节可能不起作用
推荐阅读
- typescript - 在 Typescript 类中声明一个常量
- javascript - 注入秘密 api 密钥
- javascript - 每一侧的碰撞检测不起作用
- android - 购买高级版后如何防止对程序进行永久检查?
- python - 为什么保存在 python 中的 GIF 像素值会发生变化?
- publish-subscribe - 我怎样才能收到来自 google pubsub 的推送消息
- php - 如何将 id 添加到 $_SERVER["PHP_SELF"] 提交
- c++ - vcpkg + cmake + Visual Studio 不工作
- linux - 通用 ELF 中的重定位 (EM: 183)
- angular - 带有 Angular 的 Webpack 别名 - 不能使用命名空间“UtilsService”作为类型