curlでリダイレクトされたページまで取得する方法
スポンサーリンク
このドキュメントの内容は、以下の通りです。
- はじめに
- リダイレクトの仕組み
- 開きたくないURLはブラウザ以外で開く
- リダイレクトURLがリダイレクトURLを返すことがある
- curlコマンドでリダイレクトを追従する
- リダイレクトをたどる例
- おわりに
はじめに
ウェブサイトでは、ページを移動したときに、HTTPの機能のリダイレクトを利用して、利用者を新しいURLへ誘導することができます。ほとんど、利用者が気づかないうちに、ブラウザは新しいURLのページに移動して、利用者はコンテンツを目にしていると思います。リダイレクトは、いくつかの目的で利用されます。例を以下に挙げます。
- ページを移動させた
- トラッキングがしたい
リダイレクトの仕組み
クライアントをリダイレクトする場合には、HTTPヘッダを利用する場合とHTMLのタグやJavaScriptを利用するパターンなどがあります。HTTPプロトコルでリダイレクトを行う場合には、HTTPレスポンスのLocationヘッダを利用して、リダイレクトを行います。
以下は、 facebook にアクセスした例です。 http でアクセスしたら、 Location ヘッダで、 https のサイトにリダイレクトされました。
$ curl -I http://www.facebook.com/ HTTP/1.1 302 Found Location: https://www.facebook.com/ Content-Type: text/html; charset="utf-8" X-FB-Debug: ... Date: Sat, 30 May 2020 14:08:09 GMT Alt-Svc: h3-27=":443"; ma=3600 Connection: keep-alive Content-Length: 0
このように、利用者をリダイレクトするときに、Location ヘッダが利用されます。
開きたくないURLはブラウザ以外で開く
URL が送られてきたときに、不用意に開きたくないケースがあります。 Twitter とかでメッセージとしてよくわからない人からメッセージを受信したときとか、スパムっぽいメールとかあやしいメールのURLとかです。ウイルスやマルウェアに感染させられそう、とか、そういったことが心配でなりません。 ブラウザ開くのは、怖いです。すでに世の中から消えているかもしれない Adobeの作った Flash や サン/オラクル のJava といったプラグイン達は、脆弱です。 サイバー攻撃は、zero day 攻撃を利用して行われます。
ただ、そういう状況においても、URLを開いて、中身を確認する必要があるかもしれません。
Windows で開くのは、はばかられるので、そういうときには、 FreeBSD など Unix OSのコマンドラインから確認します。そのときに使うのが、curl コマンドを利用します。
リダイレクトURLがリダイレクトURLを返すことがある
直接開きたくない例として、リダイレクト URL があります。リダイレクトURLは、いったい、どこのサイトに連れていかれるかわからないため、開きたくないということです。ですが、一般的に、リダイレクトURLは、広く使われています。多段リダイレクトが利用されることもあり、リダイレクトURLがさらにリダイレクトURLにリダイレクトされることもあります。リダイレクトの入れ子構造の場合、1つ1つ解決していくのは、面倒です。curlコマンドでリダイレクトを追従する
curlコマンドには、リダイレクトを追従するオプションがあります。それは、 -L オプションです。リダイレクトをたどる例
curl コマンドでリダイレクトを辿ってみます。URL は、適当ですので、気にしないでください。
% curl -L -I 'http://t.co/foo' HTTP/1.1 301 Moved Permanently Date: Sat, 02 Feb 2013 14:27:38 GMT Location: http://bit.ly/bar Cache-Control: private,max-age=300 Expires: Sat, 02 Feb 2013 14:32:38 GMT Content-Length: 0 Set-Cookie: k=XXXXX; path=/; expires=Sat, 09-Feb-2013 14:27:38 UTC; domain=.co; httponly Server: tfe Connection: close HTTP/1.1 301 Moved Server: nginx Date: Sat, 02 Feb 2013 14:27:39 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Set-Cookie: _bit=XXX;domain=.bit.ly;expires=Thu Aug 1 14:27:39 2013;path=/; HttpOnly Cache-control: private; max-age=90 Location: http://hoge.com/ MIME-Version: 1.0 Content-Length: 119 ...
おわりに
このように、curlコマンドであっても、リダイレクトに追従することが可能です。ただし、 JavaScript でリダイレクトするようなケースについては、対応できません。また、本件とは、無関係ですが、 t.co と bit.ly Ha, httponly フラグを利用してますね。
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12