LoginSignup
50
46

More than 5 years have passed since last update.

ブラウザのリクエストをcURL形式で取得

Last updated at Posted at 2016-05-25

FirefoxやChromium(またはGoogle Chrome)には、ブラウザが送信したリクエストをcURLのコマンドライン形式でコピーできる機能があります。これを利用することで、シェルスクリプトとcURLを使って、リクエストの自動化も容易に実現できます。

firefox_copy_as_curl.png

cURL形式でコピー

ブラウザの開発者ツールには、送信したHTTPリクエストを一覧表示できるNetworkタブがあります。各リクエストを右クリックすると「Copy as cURL」というのがあります。これは文字通り、ブラウザが送信したリクエスストをcURLの形式でコピーできます。

例えば i-beam.org にアクセスしたときのGETリクエストを、cURLでコピーすると以下のようになります。リクエストヘッダのパラメータは -H オプションで渡されます。このリクエストはアクセスするページだけでなく、ユーザエージェントなども設定されます。

curl 'http://i-beam.org/' -H 'Host: i-beam.org' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Connection: keep-alive' -H 'If-Modified-Since: Sun, 28 Feb 2016 11:54:45 GMT' -H 'Cache-Control: max-age=0'

Basic認証の自動化

Basic認証が設定されているページは、認証情報をリクエストヘッダの Authorization に設定します。cURLでもリクエストヘッダを設定することで、Basic認証に成功できます。Basic認証が求められるページは、こちらなどからどうぞ。ブラウザ認証後のページを開き、そのリクエストをcURL形式して実行すると、ターミナルからもBasic認証できるのが確認できます。

ブラウザのセッションにログイン

HTTPはステートレスなプロトコルです。Webサイトのログイン状態を維持するには、セッションがサーバで記憶され、セッションIDがブラウザのクッキーで記憶されます。ブラウザはリクエストヘッダにセッションIDを付与することで、サーバはセッションの照会を行います(参考)。cURLを使ったリクエストも、ブラウザが取得したセッションが残っている限り、セッションIDでログイン情報を利用できます1

ログイン時に確認できるページを、cURLでも取得してみます。まずはQiitaログイン後、ルートディレクトリ(/)にアクセスするときのリクエストをコピーします。そして次のようにパイプで繋いで必要な情報をgrepします。すると、Qiitaの未読通知数を取得できます。

curl 'http://qiita.com/' -H ...... | grep -o 'initial_unread_count":[[:digit:]]*'  | grep -o '[[:digit:]]*'

副作用のないページに対しては、容易にcURLで取得できました。しかしデータ更新など副作用のあるリクエストは、まともなサイトではCSRF対策されているので一筋縄にはcURLはできないです。こういったサイトに対してリクエストを自動化するときは、PhantomJSなどを使うのをおすすめします。


  1. cURLにもクッキーはありますが、ここでは使用しません。 

50
46
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
50
46