【问题标题】:Send urlencoded POST request with wget使用 wget 发送 urlencoded POST 请求
【发布时间】:2019-05-19 13:35:47
【问题描述】:

以下curl 将发送带有url 参数自动urlencoded 的POST 请求:

u="url=http://somewhere.net?param1=val1&param2=val2"
curl -XPOST --data-urlencode "$u" http://example.com

但是,我需要从没有 curl 已安装。

有没有办法用wget 达到同样的效果? $u 是否可以由wget 或其他可能安装在最小 linux 安装上的程序自动进行 urlencoded?

【问题讨论】:

标签: bash curl post wget


【解决方案1】:

正如@Roadowl 在 cmets 中所建议的那样,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 不喜欢空字节并且可能不允许在变量中使用它们,因此空字节可能不起作用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    • 2018-07-21
    • 2017-12-11
    • 2021-01-19
    • 1970-01-01
    • 2017-12-18
    • 2014-03-30
    相关资源
    最近更新 更多