JavaScriptでHTTP/HTTPSアクセスをする場合、どうすればいいのか。request/requestやvisionmedia/superagentあたりが有名どころでしょうか。でもこれらを使っている時に割と困ることはあります。cookie? form? encode? header? json? xml?
しかし、Node.jsでスクレイピングするならば - プログラマでありたい という記事でなるほどと思いました。request や superagent で面倒な事は、より高度な対応ができる cheeriojs/cheerioやktty1220/cheerio-httpcliやsrveit/mechanize-js を使えばいいのです。
基本的な考え方
- 単純なAPIアクセスにはrequestかsuperagentを使う
- それ以外の用途は全てcheerioかcheerio-httpcliかmechanize-jsを使う
という考え方でいけば話は実に簡単になるのではないでしょうか。
ここでは個人的偏見により、requestのPromise版であるrequest-promiseとcheerio-httpcliに決め打ちしていきます。
request-promise
requestには派生系として、Promiseに対応したrequest-promiseというライブラリがあります。今の時代ではもう皆さん、最低でもES2015かTypeScriptを使っていると思いますので、旧態依然としたインターフェースのrequestではなくPromiseで楽をしてしまいましょう。もっともrequest-promise自体はbluebirdを使って古いJavaScriptでも動くのですが。
使い方はgithubのチートシートを見れば良いです。
これだけです。これ以外の用途にはcheerio-httpcliを使っちゃいましょう。
cheerio-httpcli
cheerio-httpcli を読めば事足りるでしょう。どうやら、作者さんが大型バージョンアップの再には変更点をQiitaに投稿してらっしゃいます。cheerio tagを見ておけばいいと思います。
まとめ
- request/superagentは複雑な事をしようとすると面倒が増えるので、単純なAPIアクセスにとどめる
- 複雑なことはもうmechanizeやcheerio-httpcliに任せてしまう
- 今の時代Promiseを使って、古いインターフェースやコールバック地獄から解放されましょう
- 僕はrequest-proimseとcheerio-httpcliに決め打ちしました
今後、このポリシーで困ったことがあったら追加で記事を書いたり、追記しようと思います。