Skip to content

bright-jp/http-headers-with-curl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 

Repository files navigation

cURLでHTTPヘッダーを送信する

Bright Data Promo

本ガイドでは、HTTPヘッダーをcURLで効果的に使用して、データ収集およびサーバーとの通信能力を向上させる方法をご紹介します。

HTTPヘッダーの理解

Hypertext Transfer Protocol (HTTP) は、クライアントがリクエストを発行してサーバーのレスポンスを待つ、クライアント・サーバーアーキテクチャに従うステートレスプロトコルとして機能します。これらのリクエストには、HTTPメソッド、サーバーの場所、パス、クエリパラメータ、ヘッダーなどの重要な要素が含まれます。

HTTPヘッダーは基本的に、クライアントとサーバー間でメタデータと指示を伝送するキーと値のペアです。コンテンツタイプ、キャッシュ規則、認証方法などのパラメータを指定する上で重要な役割を果たし、スムーズで安全なクライアント・サーバー間のやり取りを実現します。Webスクレイピングの運用では、HTTPヘッダーによって、異なるUser-Agentのシミュレーション、コンテンツネゴシエーションの管理、Webサイトの要件やプロトコルに応じた認証の処理などを行い、リクエストを調整できます。

WebスクレイピングにおけるHTTPヘッダーの一般的な用途には、user-agent (UA) の変更、レスポンス形式の指定、条件付きリクエストの実行、application programming interfaces (APIs) での認証などがあります。

cURLヘッダーの基本

このチュートリアルを進める前に、ターミナルで次のコマンドを実行して、お使いのシステムに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 filecommand not found のようなエラーが出る場合は、curlをインストールする必要があります。

また、ヘッダーを確認するためのサービスも必要です。たとえば httpbin.org は、シンプルなHTTPリクエスト/レスポンスサービスを提供しています。

curlに慣れている方であれば、基本構文が次のパターンであることをご存じでしょう。

curl [options] [url]

つまり、mywebpage.com からコンテンツを取得するには、次を実行します。

curl www.mywebpage.com

デフォルトのcURLヘッダーを確認する

httpbin.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"
  }

AcceptHostUser-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.orgHost
  • 値が curl/7.55.1User-Agent
  • 値が */*Accept

出力では、< Content-Type: application/json のように小なり記号 (<) で始まる行がレスポンスヘッダーを表します。

-Hでデフォルトヘッダーを変更する

-H または --header フラグを使うと、サーバーへカスタムヘッダーを送信でき、テストに便利です。

たとえば、User-Agentcurl/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 headerMy-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-1Custom-Header-2)を、それぞれ値 onetwo で送信するには、次を実行します。

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"
  }
}

Summary

本記事では、HTTPヘッダーの基礎を取り上げ、curlを使用してそれらを効果的に管理する方法を示しました。

包括的なWebスクレイピングソリューションとしては、Bright Dataをご検討ください。匿名性を高めてIPブロックを防ぐ proxy services や、CAPTCHAなしで地理的に制限されたコンテンツへのアクセスを支援する Web Unlocker など、専門的なツールとサービスを提供しています。

今すぐ無料トライアルを開始しましょう!

About

HTTPヘッダーをcURLで使用して、データ収集およびサーバー通信機能を向上させる

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors