通過Curl 對url進行encode操作
阿新 • • 發佈:2018-12-26
最近做專案的時候,通過 Gflags Reload 時候 發現對於某些value中包含=%中文等字元的支援不夠好,value被截斷了。
經過分析後,發現程式對url切分是用=&為標準的,如果value中帶有這樣的特殊字元,必然導致截斷。
解決的方法也很簡單,框架預設對value進行進行了urldecode的操作,所以在進行請求的時候,只需要對value進行urlencode就好。
有了思路後,就好解決了。因為希望依賴不多,就避免採用了python php perl之類的語言。在gist找到一個通過shell來操作的。
https://gist.github.com/cdown/1163649/8a35c36fdd24b373788a7057ed483a5bcd8cd43e
這個方案能夠解決特殊字元的問題,但對中文的支援有問題。
於是用搜索到了,https://blog.longwin.com.tw/2017/12/bash-shell-curl-send-urlencode-args-2017/
這個是採用curl命令,考慮到我們reload也是curl來的,就copy來了,但文章的程式碼有點問題,於是改寫如下
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 [[ $? == 0 ]]; then echo "${data##/?}" fi return 0
https://gist.github.com/westfly/ed7e25ee4353751d94132f92837a7074
希望大家有用。