これまで、curlコマンドを使ってインターネット経由でデータを取得する方法を取り上げてきた。だが、curlコマンドの「本領」はその先、データを取得した後、さまざまな操作ができる点にある。今回は、操作に役立つオプションを紹介しよう。
curlコマンドの実用的なオプション
ユーザーがWebブラウザを使う際には、さまざまな操作を行っているだろう。前回までに紹介したのは、HTTPのGETにあたるコマンドの使い方だけだ。通常ならば、POSTも使うし、ファイルのアップロードなども行う。ベーシック認証やリダイレクトも発生する。curlコマンドでは、それらの操作も行えるのだ。
その辺りを本気で説明するとなると、HTTPについての解説から始めることになり、本連載の範疇を超えるので、ここでは控えておく。だが、curlコマンドを使えるとそういったことを自動化できることは覚えておいてほしい。使いこなせれば、いつも行っている操作のかなりの部分を自動化できるようになるだろう。
ここで1つ、実用的なオプションの使い方を紹介しておこうと思う。実は、curlコマンドを使ってもWebページの内容を取得できないことがある。その原因は、TLS証明書が許容できないものであるとか、エージェント名で弾かれているとかいくつか考えられるのだが、次のようなオプションを指定して実行するようにしておくと、大体うまくページの内容が取得できることが多い。
#!/bin/sh
exec curl -s --insecure -A Mozilla/5.0 --location --compressed -get $@
これは、指定したURLの内容を取得するためのスクリプトだ。「cat」のネット版といったニュアンスで、「cat_net」という名前にしてみた。
「-s」(または「—silent」)はサイレントモードを指定するオプションで、標準エラー出力に表示される進捗表示を抑制する効果がある。また、—insecureオプションは、HTTPS通信をする場合に安全ではないと考えられる場合でも通信を実施する(警告を無視する)オプションであり、-AオプションはHTTPの「User-Agent」を指定するためのオプションだ。—locateオプションはコンテンツの場所が移動したという返事が返ってきたときに移動した先のページのデータを取得し、—compressedオプションでは圧縮通信を実現する。この辺りのオプションを付けておけば、大体のWebページの内容は取得できるはずだ。
試しに適当なURLを指定して実行してみよう。
% cat_net http://news.mynavi.jp | head -20
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Language" content="ja" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>マイナビニュース</title>
<!-- #BeginEditable "head" --><meta name="author" content="Mynavi Corporation" lang="ja"/>
<meta name="copyright" content="Mynavi Corporation All rights reserved."/>
<meta name="robots" content="index,follow,noarchive"/>
<meta name="description" content="マイナビニュースは100以上のカテゴリが毎日更新される総合情報ニュースサイトです。ビジネス,デジタル,ライフスタイル,エンタメなど幅広いジャンルから経営やテクノロジー・鉄道・車などニッチなカテゴリーまで,最新ニュースと分析レポート・コラムで構成しています。"/>
<meta name="keywords" content="ニュース,マイナビ,ビジネス,デジタル,ライフスタイル,エンタメ,写真"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" type="text/css" href="http://n.mynv.jp/css/common.css?v=15" media="screen,print" />
<link rel="stylesheet" type="text/css" href="http://n.mynv.jp/css/channel.css?v=7" media="screen,print" />
<link rel="stylesheet" type="text/css" href="http://n.mynv.jp/css/ea.ca.css?v=17" media="screen,print" />
<link rel="apple-touch-icon-precomposed" href="apple-touch-icon-precomposed.png" />
<meta property="fb:pages" content="232590976805278" />
<!--[if lt IE 9]>
%
こんな感じで、curlコマンドにはたくさんのオプションが用意されており、それらを使うことでさまざまな動作を実現できる。もし何か複雑なことを自動化したいと思ったら、まずcurlのマニュアルを掘り返してみるというのは悪くない時間のかけ方だ。