使用wget发送urlencoded POST请求

时间:2019-05-19 13:35:48

标签: bash curl post wget

以下curl将发送一个POST参数,该参数带有自动进行urlencoded的url参数:

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

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

是否有一种方法可以通过wget实现相同的目的? $u或其他可能在最小的Linux安装中的程序会自动对wget进行urlencode编码吗?

1 个答案:

答案 0 :(得分:1)

@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不喜欢null字节,并且可能不允许在变量中使用它们,因此可能无法使用null字节