Curlの使用を開始する方法とその理由:実践的な紹介

APIの出力を本番環境にデプロイする前にテストする場合でも、単にWebサイトから応答をフェッチする場合(たとえば、ダウンしていないことを確認するため)でも、Curlは事実上遍在しています。

データサイエンティストとして、私は時々それを使わなければなりませんでした。ただし、多くの場合、チームのSlackチャネルを巡回するコピーして貼り付けたcurlコマンドからパラメーターを置き換えるだけでした。

この強力なツールを最大限に活用するには、この強力なツールをよりよく理解する必要があると判断しました。ここで、このカールチュートリアルで見つけた最も興味深いもののいくつかを共有します。

追加したいヒントやコツがある場合は、コメントで追加してください。このツールについての私の理解はまだ初期段階です。

カール:それは何のために良いですか?

Curlは、シェルからHTTPリクエストを実行できるようにするコマンドラインツールです。FTPなどの他の多くのプロトコルについても説明しますが、これらはこのチュートリアルの範囲を超えています。

その名前は「クライアントURL」の略で、スウェーデンの開発者ダニエル・ステンバーグによって開発されました。これはオープンソースプロジェクトであり、貢献したい場合に備えて、そのコードはここにあります。

お気に入りの端末から呼び出すことができ、通常はLinuxベースのOSにプリインストールされています。それ以外の場合は、通常、Linuxではapt-getを介してダウンロードし、Macではbrewできます。

GETメソッドの呼び出し

最も基本的な形式では、curlコマンドは次のようになります。

curl //www.dataden.tech

curlのデフォルトの動作は、指定されたURLでHTTPGETメソッドを呼び出すことです。このように、そのコマンドのプログラムの出力は、サイトがGETで返すHTTP応答の本文全体(この場合はHTML)になり、stdoutで指定されたとおりに書き込まれます。

シェルを離れずに応答を読み通したい場合は、出力を簡単にスクロールできるように、少なくともそれをlessコマンドにパイプすることをお勧めします。

多くの場合、応答の内容をファイルに送りたいと思うでしょう。これは、次のように-o引数を使用して実行されます。

curl -o output.html www.dataden.tech

これは次と同等です:

curl www.dataden.tech > output.html

オプションで、次のように、-s引数を使用してcurlを呼び出すサイトのURLを指定できます。

curl -s //www.dataden.tech

引数の順序を変更できます。

–nextを使用して複数のURLを指定することもできますが、公式ドキュメントでは、代わりに異なるコマンドで各URLに対してcurlを呼び出すことをお勧めします。

URLへのPOSTの実行

APIが正しく機能しているかどうかをテストしたい場合がありますが、通常はAPIに引数を送信する必要があります。

通常、これはPOSTメソッドを介して行い、必要なすべてのパラメーターを含むJSONを渡します。curlを使用してこれを行う方法はたくさんあります。

次のように引数の値を渡すことができます。

curl --data "name=John&surname=Doe" //www.dataden.tech

または通常のJSONのように:

curl --data '{"name":"John","surname":"Doe"}' \//www.dataden.tech

使用-データが使用するのと同じです-d、との両方が自動的にPOSTする方法の変更を行います。ただし、-Xフラグ(-request)を使用して、呼び出すメソッドを指定することもできます。

curl -X "POST" \-d "name=John&surname=Doe" //www.example.com

サイトのヘッダーを取得する

場合によっては、潜在的に重い応答全体を実際にロードすることなく、サイトがまだ稼働しているかどうかをすばやく確認する必要があります。また、ヘッダーには重要な構成が格納されている場合もあります。

これらの2つのユースケースもcurlによって対処されます。我々は使用することができます-include-iヘッダをインクルードする)のパラメータを、そして-head-I -つまりの首都「i'-は)のみ(HEADメソッドを呼び出す)ヘッダをインクルードします。

ユーザーエージェント値の設定

基本を説明したので、カールでできる最もクールなことをいくつか紹介します。

ユーザーエージェントの引数は、サイトが異なったレンダリング行った場合には、あなたが使用しているデバイスやブラウザのバージョンを指定できます。

これにより、ラップトップからモバイル版のサイトを表示したり、その逆を行うことができます。

セキュリティの観点から、これはおそらくいくつかの問題を引き起こします。これまで、(仮想マシンを使用せずに)別のデバイスを使用しているふりをするのがどれほど簡単かはわかりませんでした。不正防止で作業していると、これが問題になる理由がわかります。

そうは言っても、これを永久に使用している限り、これは、タブレット、モバイルデバイス、またはラップトップからWebサイトがどのように見えるかを確認するための素晴らしい方法です。

これは公式ドキュメントから直接引用した例です(ただし、ユーザーエージェントのリストはオンラインですぐに入手できます)。

curl --user-agent "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" www.example.com

Curlとの接続のタイミング

私がカールについてもっと学び始めたもう一つの理由は、私のウェブサイトが応答するのにどれくらい正確にかかったかを見たかったということでした。

基本的なドキュメントではカバーされていませんが、少しグーグルでこのコマンドが明らかになりました。これは非常に便利です。

curl -w "%{time_total}\n" -o /dev/null -s www.example.com

これは、指定されたドメインから応答をフェッチするのにかかった合計時間を単に出力します。

より一般的には、-w(–write-out)引数は特別なフォーマット文字列を取り、フォーマットされた方法で、応答のさまざまなプロパティを予約済みキーワードに入力します。すべてのキーワードとそれぞれの値は、コマンドのマニュアルページで入手できます。

参考文献

この幅広いテーマについてもっと知りたい場合に備えて、興味深いと思われるリンクをいくつか紹介します。

  • ユーザーエージェントのリストさまざまなデバイスやブラウザのユーザーエージェント引数をまとめたもの。
  • Curlの公式ドキュメント。
  • Curlのマンページ。

結論として

この紹介がお役に立てば幸いです。このチュートリアルでは、少なくともこの便利なコマンドの基本を理解しておいてください。

前に言ったように、私もまだ学んでおり、プログラムの使用に関する他の興味深い知識に感謝します。これまでに書いたことに関するフィードバックについても同じことが言えます。

私が間違いを犯した場合、または私がより明確に表現できたと思われる部分がある場合は、私に知らせてください。

またお会いできることを願っております。コーディングをお楽しみください。

MediumとTwitterでフォローして、チュートリアル、ヒント、記事を最新の状態に保ちます。この記事が気に入った場合は、Web開発者の友人と共有することを検討してください(または、カールを学ぶように指示する受動的攻撃的な方法として)。

2018年10月7日にwww.dataden.techで最初に公開されました。