LoginSignup
1
0

More than 5 years have passed since last update.

shellでcurlコマンドを使って無理やりURLエンコードする方法

Posted at

はじめに

みなさん、シェルで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使えるならそのほうが(きっと)楽。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0