linux shell urldecode_Bash shell 使用 CURL urlencode 送參數

Bash shell 想要送中文等需要被 urlencode 過的文字到網址去,要怎麼做呢?

此篇使用 curl 直接傳送,另外在紀錄 Bash 的 urlencode() / urldecode() 寫法

Bash shell 使用 CURL urlencode 送參數

CURL 想要做 urlencode,需要搭配 --data-urlencode 的參數(--data-urlencode 需要另外搭配 -G),另外不需要 encode 的,一樣可以帶在網址後面即可。

直接看範例比較容易懂,下述範例要傳送三個參數:msg、text、channel,channel 不需要 urlencode,先直接帶在後面即可。

curl -X GET -G --data-urlencode "msg=abcs" --data-urlencode "text=中文" "http://example.com/?channel=blog"

註:若需要 POST,則 -X POST,所有參數都需要加到 --data-urlencode 去。

若不使用 curl,想要於 Bash shell 直接轉譯傳送,下面有兩種 urlencode() 的寫法(將下述寫入 .bashrc 即可),自行挑其一使用:

Bash shell 使用 curl 來達成 urlencode 所需命令

function urlencode() {

local data

if [[ $# != 1 ]]; then

echo "Usage: $0 string-to-urlencode"

return 1

fi

data="$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "$1" "")"

if [[ $? != 3 ]]; then

echo "Unexpected error" 1>&2

echo "${data##/?}"

return 0

}

使用方式

$ echo http://example.com/q?=$( urlencode "中文" )

Bash shell 的 urlencode() / urldecode()

下述整理自此篇:Bash urlencode and urldecode # 註:此篇最上面的不能用,往下翻的才有正確能用的版本

Bash shell 使用 xxd 來達成 urlencode 所需計算

function urlencode() {

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 "$c" | xxd -p -c1 | while read x;do printf "%%%s" "$x";done

esac

done

}

function urldecode() {

# urldecode

local url_encoded="${1//+/ }"

printf '%b' "${url_encoded//%/\\x}"

}

相關網頁

相關

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.檢視「Tsung」的全部文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值