はじめに
みなさん、シェルでURLエンコード、したくないですか?
私は(必要ないなら)したくないです。
が、そうも言ってられない時、ありますよね?(えっ、Python使えば一瞬だろ?・・・せやな)
と、いうことで、シェルしか使えない縛りにあった時のために、curlコマンドを使って無理やりURLエンコードをする方法です。
コマンドの全容
最終的なURLhttps://sample.co.jp?p=あいうえお&q=かきくけこ
sample_query
p=あいうえお&q=かきくけこ
HOST="https://sample.co.jp"
URL=""
while IFS='\&' read P1 P2;do
# curlのrequestログを一時的なファイルに書き出す
curl ${URL} -v --verbose --get --data-urlencode "${P1}" --data-urlencode "${P2}" 1> /dev/null 2>temp_log
# curlのログからurlEncodeされたリクエストを取り出し、Hostとくっつける
while read Q1 Q2 Q3 Q4;do
URL=`echo ${HOST}${Q3}`
done <<< `grep -E "> GET .+ HTTP/1\.[0-9]" temp_log`
done <<< `sample_query`
rm temp_log
結果https%3A%2F%2Fsample.co.jp%3Fp%3D%82%A0%82%A2%82%A4%82%A6%82%A8%26q%3D%82%A9%82%AB%82%AD%82%AF%82%B1
やってること
sample_query
を読み取って、&
で文字列分割。各クエリをcurlを--data-urlencode
オプションつけて叩く。requestの出力を一旦temp_log
に格納。temp_log
を分割してエンコードされた部分を抜き取ってHOST
とくっつけてURL
に格納
終わりに
Python使えるならそのほうが(きっと)楽。