Отправить urlen-кодированный POST-запрос с помощью wget - PullRequest
0 голосов
/ 19 мая 2019

Следующая curl отправит запрос POST с параметром url, автоматически введенным с помощью urlencoded:

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

Однако мне нужно выполнить этот запрос из системы, в которой нет curl Установлено.

Есть ли способ добиться того же с wget?Может ли $u автоматически кодироваться с помощью wget или другой программы, которая может быть в минимальной установке Linux?

1 Ответ

1 голос
/ 20 мая 2019

, как предложено в комментариях @Roadowl, сам bash может urlencode данных, вызов wget может выглядеть как

wget --post-data=$(printf "url="; urlencode $u) http://example.com

с использованием реализации urlencode из https://gist.github.com/cdown/1163649,

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 не любит нулевые байты и, вероятно, не допустит их в переменных

...