TOP ▲ itcore TOPTIPSurlencode.php

urlencodeするシェル関数 | itcore 2017年

curlのバージョンが古くて--data-urlencodeが使えない場合などに、自力でURLエンコードする。

シェルの例 log_put.sh

# [URLエンコード関数]
# "$@"のようにシェル変数を""でくくらないと改行が空白になるので注意。
escape() {
  local s1
  s1="$@"
  # %を最初にエンコードする。
  s1="${s1//\%/%25}"
  s1="${s1// /%20}"
  s1="${s1//\!/%21}"
  s1="${s1//\"/%22}"
  s1="${s1//\#/%23}"
  s1="${s1//\$/%24}"
  s1="${s1//\&/%26}"
  s1="${s1//\'/%27}"
  s1="${s1//\(/%28}"
  s1="${s1//\)/%29}"
  s1="${s1//\*/%2A}"
  s1="${s1//\+/%2B}"
  s1="${s1//\,/%2C}"
  s1="${s1//\//%2F}"
  s1="${s1//\:/%3A}"
  s1="${s1//\;/%3B}"
  s1="${s1//\</%3C}"
  s1="${s1//\=/%3D}"
  s1="${s1//\>/%3E}"
  s1="${s1//\?/%3F}"
  s1="${s1//\@/%40}"
  s1="${s1//\[/%5B}"
  s1="${s1//\]/%5D}"
  s1="${s1//\^/%5E}"
  s1="${s1//\`/%60}"
  s1="${s1//\{/%7B}"
  s1="${s1//\|/%7C}"
  s1="${s1//\}/%7D}"
  s1="${s1//\~/%7E}"
  echo "$s1"
}

data1=[cron]`crontab -l | grep rsync`
data2=[rsync]`ls -l /root/rsync.log`
data3=[sent]`tail -1 /root/rsync.log`
data="$data1 $data2 $data3"
data=`escape "$data"`

curl -k -s -S -X POST "https://[host]/log_put.php" \
--data "host=`hostname`" \
--data "data=$data" \
-u "user:password"