curlでAPIを叩く
- webでAPI作ったりしてる時、修正したら確認用にいちいちブラウザで叩いたりするのがめんどくさい。
-
jmeter
でシナリオ書いたり、Mechanize
とかでスクレイピング書くほどでもない。 - というかその方がめんどくさい。本末転倒。
みたいな時はcurl
使えば良いと思う。
設定ファイル
~/.curlrc
に置いておけばデフォルトで設定読んでくれるらしいけど、
オプションで設定指定できるのでそれで。
詳細はman curl
するかググって。
curl.cnf
# UAの変更
-A = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25"
# カスタムヘッダつけたり
-H X-HOGEHOGE:123
-H X-FOOBAR:piyo
# basic認証用
--user user:pass
# ダウンロード進捗を表示しない
--silent
# リダイレクト辿る
-L
# レスポンスヘッダをstderrに吐く
-D /dev/stderr
こんな感じにしておいて
api_access.sh
#!/bin/bash
URLS=(
localhost/test1.php.json
localhost/test2.php.json
localhost/test3.php.json
localhost/test4.php.json
)
for x in ${URLS[@]}; do
curl -K curl.cnf $x | jq .
done
みたいな。
とりあえず↑だとjson返すAPIを想定してjq
に流して整形表示してるけど、
html+DOM で真面目に解析するなら、ruby
+ Nokogiri
とかでぱぱっとvalidateするやつ書いてそれに食わせても良いかも。
ちなみにpostでデータ送ったりも出来るけど、
更新処理とかのロジックのとこは真面目にチェックしたいので使ってない。
その辺はまぁ、お好みで。
1秒毎に叩く
もういちいちコンソールに移ってシェル叩くのもめんどくさい。
勝手にコンソールに結果垂れ流してほしい。って時。
bash
while sleep 1; do clear && date +"%Y%m%d_%H%M%S" && ./api_access.sh; done;
正常終了でsleep
は0返すからこれで無限ループになるはず。
ちなみに
当然外部のAPIも叩けるので、
ちょっと手加えれば超カンタンにdos攻撃できちゃうけど、そういう事はしないように。