A picture with white and blue lettering on it

ウェブをスクレイピングするときもAPIを利用するときも、基本となるのはHTTPリクエストを送り、レスポンスを受け取ることです。リクエストを具体的に指定するほど、必要なデータを正確に取得できます。そのために使うのがヘッダーです。ヘッダーはコロンで区切られたキーと値の組み合わせで、コンテンツタイプやキャッシュの指示など、HTTPメッセージに関する追加情報を伝えます。ヘッダーを使えば、必要な情報を取得し、不要なレスポンスを避けられます。この記事では、cURLでHTTPヘッダーを送信する基本的な方法と、その活用場面を解説します。

なぜcURLなのか?

HTTPヘッダーの概要を押さえたところで、cURLについて見ていきましょう。cURLは、サーバーとの間でデータをやり取りするための使いやすいコマンドラインツールで、ヘッダーの送信にも適しています。主な利点は次のとおりです。

  • 軽量です
  • HTTP(S)、SMTP、FTPなど多くのプロトコルをサポートします
  • 追加ライブラリを必要としません
  • Windows、Linux、macOSなど、主要なオペレーティングシステムに対応しています
  • 無料で使え、多くの環境ではあらかじめインストールされています
  • 詳細なドキュメントと大きなユーザーコミュニティがあるため、問題が起きても解決策を見つけやすいです。

そのため、HTTPヘッダーを送信できる他のツールが多数あるにもかかわらず、cURLは広く利用されています。  

HTTPヘッダーを送信するタイミング

ここからは、HTTPヘッダーを送信する主な場面を見ていきましょう。

  • 認証と認可

APIを呼び出す場合や認可が必要なコンテンツをリクエストする場合、データを取得するためにトークンなどの認証情報を送る必要があります。 Authorization ヘッダーをcURLで送信すると、アクセス許可に必要な情報をサーバーに渡せます。リクエストでは -H オプションを使います。以下は、リクエストとレスポンスを確認できるサービス、httpbin.org に対するcURLリクエストの例です。 

Example of sending the Authorization header
  • コンテンツネゴシエーション

JSONやXMLなどの形式でコンテンツを送信し、サーバーに正しく解釈させるには、 Content-type HTTPヘッダーをリクエストに含める必要があります。これによりサーバーはコンテンツの処理方法を判断でき、エラーや遅延を抑えられます。

Example of sending the Content-type header
  • CORS (Cross-origin resource sharing)

アプリケーションは、サービスやデータへのアクセスを試みる主体に応じて、アクセスを許可することがあります。このような状況でリクエストのオリジンが重要な場合は、 Origin HTTPヘッダーでオリジンを指定できます。認証と混同しないでください。これらのユースケースは似ていて一緒に使われることも多いですが、別のものです。

Example of sending the Origin header
  • user-agentを指定する

モバイルアプリ、ウェブアプリ、APIクライアントなど、クライアントの種類によって得られるレスポンスが変わることもあります。リクエストでクライアントの種類を指定すれば、必要なレスポンスを取得できます。

Example of sending the User-agent header
  • キャッシュ制御設定を調整する

キャッシュ設定の管理が必要な場面では、HTTPヘッダーが役立ちます。必要なのは Cache-control ヘッダーをリクエストに含め、その値を指定することだけです。レスポンスは指定した設定に従ってキャッシュされます。

Example of sending the Cache-Control header
  • カスタムリクエストを送信する

アプリケーションによっては、リクエストの処理や目的の操作の実行にカスタムヘッダーが必要になることがあります。この場合、リクエストにそのようなヘッダーを含める必要があります。脆弱性や攻撃から保護するために、これらのヘッダーが必要になる場合もあります。アプリを使う前にドキュメントを読み、利用可能で必要なカスタムヘッダーを確認してください。

Example of sending the custom header
  • 条件付きリクエストを送信する

特定の条件に一致するデータだけが必要な場合は、条件付きヘッダーを使います。必要なデータだけを取得できるため時間を節約でき、不要な情報の読み込みによるGB単位の通信量も抑えられます。 If-Match または If-Modified-Since は、そのようなヘッダーの例です。 

Example of sending the If-Match header

cURL: その他の機能 

  • 複数のヘッダーを送信する方法

同じリクエストで複数のヘッダーを送信することもあります。その場合は、同じcURLコマンドにすべて指定できます。新しいキーと値の組み合わせを追加するたびに    H オプションを使うことを忘れないでください。

Example of sending multiple headers
  • レスポンスヘッダーを確認する方法

サーバーから返されるレスポンスヘッダーを確認すると、トラブルシューティングやパフォーマンスの監視に役立ちます。リクエストの処理にかかった時間や、認証の問題があったかどうかに関する情報が得られます。これらは -I または –head オプションで確認できます。どちらもヘッダーだけを表示します。 

Example of checking response headers

ヘッダーとコンテンツの両方を見たい場合は、 -i または –include オプションを使います。

Example of checking response headers and content
  • 空のヘッダーを送信する方法

一部のAPIでは、値がなくてもリクエストに特定のヘッダーが必要です。空のヘッダーが特別な動作を示すこともあります。開発者は、サーバーがこのような状況にどう応答するかを確認したり、攻撃者に悪用される脆弱性がないか検証したりするためにも利用します。このようなヘッダーを送信するには、値を指定せず、名前の後ろにセミコロンを付けます。

Example of sending empty headers
  • ヘッダーを削除する方法

cURLはUser-Agentヘッダーなど、いくつかのヘッダーをデフォルトで追加します。不要で削除したい場合は、ヘッダー名の後にコロンを入力し、値は指定しません。

Example of removing a header
  • 詳細モードを有効にする方法

この機能は、サーバーがリクエストをどのように処理しているかを確認したい場合に使います。このモードを有効にすると、cURLはリクエストとレスポンスの詳細、HTTPメソッド、バージョン、ステータスコード、接続プロセスに関する情報など、多くの詳細を提供します。通信の各ステップに関する情報を確認できるため、デバッグに役立ちます。有効にするには -v または –verbose オプションを使います。

Activating the verbose mode
  • ヘッダーを保存する方法

デバッグやパフォーマンスの監視では、ヘッダーを保存して分析し、記録を残すことがよくあります。ヘッダーはファイルに保存して後で利用できます。手順は次のとおりです。

  1. 使用するのは -d または –dump-header オプションです。
  2. リクエストのコンテンツも保存する必要がある場合は、 -o または –output オプションを追加します。
  3. コマンドの後に、ヘッダーの保存先となるファイル名を指定してください。
Saving HTTP headers

注: 一般に、HTTPヘッダーでは大文字と小文字は区別されません。ただし、APIによっては特定のヘッダー表記を求め、期待どおりの大文字表記でなければ動作しないことがあります。ヘッダーを送信する前に、ドキュメントをよく確認してください。

cURLでHTTPヘッダーを送信するためのプロキシ

ウェブをスクレイピングしたり、大量のリクエストを送信する作業を行ったりすると、リクエスト制限や地域によるブロックに直面することがあります。そのような場合、プロキシを使うと世界各地から安定してアクセスできます。たとえば、DataImpulseは 倫理的に調達されたプロキシ を提供しており、cURLなどのツールと簡単に組み合わせて利用できます。これにより、制限に妨げられずに必要な数のリクエストを送信できます。

まとめ

データの取得に、特別なツールや高価なツールが必要とは限りません。cURLは無料で利用でき、リクエストを細かく指定して必要な情報をすばやく取得できます。さらに効率を高めるには、cURLとDataImpulseのプロキシを組み合わせることができます。当社は、従量課金制で手頃な価格の、応答時間1秒のプロキシを提供しています。画面右上の「今すぐ試す」ボタンをクリックするか、次の連絡先までお問い合わせください: [email protected]

Share article: