最近做項目的時候,通過 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
希望大家有用。