本ガイドでは、HTTPヘッダーをcURLで効果的に使用して、データ収集およびサーバーとの通信能力を向上させる方法をご紹介します。
- HTTPヘッダーの理解
- cURLヘッダーの基本
- デフォルトのcURLヘッダーを確認する
- -Hでデフォルトヘッダーを変更する
- カスタムヘッダーを作成する
- 空のヘッダーを扱う
- ヘッダーを削除する
- 複数のヘッダーを一度に送信する
- まとめ
Hypertext Transfer Protocol (HTTP) は、クライアントがリクエストを発行してサーバーのレスポンスを待つ、クライアント・サーバーアーキテクチャに従うステートレスプロトコルとして機能します。これらのリクエストには、HTTPメソッド、サーバーの場所、パス、クエリパラメータ、ヘッダーなどの重要な要素が含まれます。
HTTPヘッダーは基本的に、クライアントとサーバー間でメタデータと指示を伝送するキーと値のペアです。コンテンツタイプ、キャッシュ規則、認証方法などのパラメータを指定する上で重要な役割を果たし、スムーズで安全なクライアント・サーバー間のやり取りを実現します。Webスクレイピングの運用では、HTTPヘッダーによって、異なるUser-Agentのシミュレーション、コンテンツネゴシエーションの管理、Webサイトの要件やプロトコルに応じた認証の処理などを行い、リクエストを調整できます。
WebスクレイピングにおけるHTTPヘッダーの一般的な用途には、user-agent (UA) の変更、レスポンス形式の指定、条件付きリクエストの実行、application programming interfaces (APIs) での認証などがあります。
このチュートリアルを進める前に、ターミナルで次のコマンドを実行して、お使いのシステムにcurlがインストールされていることを確認してください。
curl --version正しくインストールされていれば、次のようなバージョン情報が表示されます。
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: [unreleased]
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL
curl is not recognized as an internal or external command, operable program or batch file や command not found のようなエラーが出る場合は、curlをインストールする必要があります。
また、ヘッダーを確認するためのサービスも必要です。たとえば httpbin.org は、シンプルなHTTPリクエスト/レスポンスサービスを提供しています。
curlに慣れている方であれば、基本構文が次のパターンであることをご存じでしょう。
curl [options] [url]つまり、mywebpage.com からコンテンツを取得するには、次を実行します。
curl www.mywebpage.comhttpbin.org を使って、curlがデフォルトで送信するヘッダーを確認するには、次のコマンドを実行します。
curl http://httpbin.org/headersレスポンスには、送信されたヘッダーが表示されます。
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd2eb0-0617353714d52f3777c9c267"
}Accept、Host、User-Agent ヘッダーは、curlのリクエストにデフォルトで含まれます。
Accept ヘッダーは、クライアントが処理できるメディアタイプをサーバーに通知します。クライアントが受け入れるコンテンツタイプを伝え、クライアントとサーバー間のコンテンツネゴシエーションを促進します。
クライアントがJSONを優先することを示す Accept ヘッダーは、次のようになります。
Accept: application/json
User-Agent フィールドにはクライアント情報が含まれており、この場合はバージョン番号付きのcurlアプリケーション(インストールされているバージョンに一致)です。
Host ヘッダーは、HTTPリクエストの対象となる特定のWebドメイン(ホスト)とポート番号を識別します。ポートが指定されていない場合は、デフォルトポートが想定されます(HTTPは80番、HTTPSは443番)。
X-Amzn-Trace-Id はデフォルトのcurlヘッダーではありませんが、リクエストがAWSのロードバランサーなどのAmazon Web Services (AWS) サービスを経由してルーティングされたことを示し、HTTPリクエストのトレースに使用できます。
curlがデフォルトでどのヘッダーを送るかを確認するには、-v または --verbose フラグで詳細モードを使用できます。これにより、ヘッダーを含む詳細なリクエスト/レスポンス情報が表示されます。
デフォルトのcurlヘッダーを確認するには、次を実行してください。
curl -v http://httpbin.org/headers出力は次のようになります。
- Trying 50.16.63.240...
* TCP_NODELAY set
* Connected to httpbin.org (50.16.63.240) port 80 (#0)
> GET /headers HTTP/1.1
> Host: httpbin.org
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 22 Mar 2024 07:18:00 GMT
< Content-Type: application/json
< Content-Length: 173
< Connection: keep-alive
< Server: gunicorn/19.9.0
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
<
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd30a8-624365ad52781957578cd5b1"
}
}
* Connection #0 to host httpbin.org left intact
大なり記号 (>) で始まる行は、クライアント(curl)がエンドポイントへ送信した内容を示し、次のヘッダーが送信されたことを確認できます。
- エンドポイント/headers への
GET(HTTPメソッド) - 値が
httpbin.orgのHost - 値が
curl/7.55.1のUser-Agent - 値が
*/*のAccept
出力では、< Content-Type: application/json のように小なり記号 (<) で始まる行がレスポンスヘッダーを表します。
-H または --header フラグを使うと、サーバーへカスタムヘッダーを送信でき、テストに便利です。
たとえば、User-Agent を curl/7.55.1 から Your-New-User-Agent に変更するには、次を使用します。
curl -H "User-Agent: Your-New-User-Agent" http://httpbin.org/headersレスポンスは次のようになります。
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "Your-New-User-Agent",
"X-Amzn-Trace-Id": "Root=1-65fd5123-3ebe566a4681427c6996c72c"
}
}Accept ヘッダーを */*(任意のコンテンツタイプを受け入れる)から application/json(JSONコンテンツのみを受け入れる)に変更したい場合は、次を実行します。
curl --header "Accept: application/json" http://httpbin.org/headers出力は次のとおりです。
{
"headers": {
"Accept": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd55c3-05c21f81770c1c5e6343b1fc"
}
}Note:
この例では
-Hではなく--headerを使用しています。これらのフラグは等価で、同じ機能を実行します。
curl 7.55.0以降では、ヘッダーを含むファイルを使用することもできます。ヘッダーファイル名が header_file の場合、次を使用できます。
curl -H @header_fileカスタムヘッダーは、標準HTTPヘッダーを超えた追加情報を提供する、開発者定義のフィールドです。
curlでカスタムヘッダーを送信するには、-H フラグを使用します。たとえば、値が Value of custom header の My-Custom-Header というカスタムヘッダーを送るには、次を実行します。
curl -H "My-Custom-Header: Value of custom header" http://httpbin.org/headersレスポンスは次のとおりです。
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"My-Custom-Header": "Value of custom header",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd7d2a-3b683be160ff2965023b3a31"
}
}空のヘッダーの送信が必要になる場合があります。たとえば、コンテンツがなくても特定のヘッダーを要求するAPI要件に準拠する場合などです。例として、HTTP Strict Transport Security (HSTS) header は、Webサイトで安全なHTTPS接続を強制します。このヘッダーには通常、HSTSの期間や挙動に関するディレクティブが含まれますが、空の値で送信すると即時のHSTS強制が確実になります。
空のヘッダーは、以前に設定されたヘッダーをクリアする目的でも使用できます。デフォルトで設定されていたヘッダーをリセットまたはクリアするには、空のヘッダーを送信することで値を実質的に削除できます。
curlで空のヘッダーを送信するには、ヘッダー名の後にセミコロンを付けて空の値であることを示します。次のコマンドは、My-Custom-Header という空のカスタムヘッダーを送信する方法を示します。
curl -H "My-Custom-Header;" http://httpbin.org/headers出力では、My-Custom-Header が空の値で表示されます。
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"My-Custom-Header": "",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd84e2-7a42d9d62a42741e448c426f"
}
}curlでヘッダーを完全に削除するには、ヘッダー名の後にコロンを付け、続けて値を指定しないようにします。
たとえば、デフォルトの User-Agent ヘッダーを削除するには、次を使用します。
curl -H "User-Agent:" http://httpbin.org/headersレスポンスには User-Agent ヘッダーが含まれず、削除されたことを確認できます。
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"X-Amzn-Trace-Id": "Root=1-65fd862d-13b181583501ae11046374a1"
}
}ここまで単一ヘッダーの例を見てきましたが、curlは複数のヘッダーを同時に送信することもサポートしています。コマンドに複数の -H フラグを含めるだけです。
たとえば、2つのヘッダー(Custom-Header-1 と Custom-Header-2)を、それぞれ値 one と two で送信するには、次を実行します。
curl -H "Custom-Header-1: one" -H "Custom-Header-2: two" http://httpbin.org/headers出力は次のようになります。
{
"headers": {
"Accept": "*/*",
"Custom-Header-1": "one",
"Custom-Header-2": "two",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd8781-143be3502c559bc5605fc6f1"
}
}本記事では、HTTPヘッダーの基礎を取り上げ、curlを使用してそれらを効果的に管理する方法を示しました。
包括的なWebスクレイピングソリューションとしては、Bright Dataをご検討ください。匿名性を高めてIPブロックを防ぐ proxy services や、CAPTCHAなしで地理的に制限されたコンテンツへのアクセスを支援する Web Unlocker など、専門的なツールとサービスを提供しています。
今すぐ無料トライアルを開始しましょう!
