C++の応用 - HTTP

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2024年3月28日 (木) 23:38時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == <br><br> == cURLライブラリ == ==== HTTPヘッダの取得例 ==== 以下の例では、cURLライブラリを使用してHTTPリクエストを行い、HTTPヘッダのみを取得している。<br> サンプルコードでは、以下に示すような手順を行っている。<br> <br> # <code>curl_easy_init</code>関数を実行して、cURLハンドルを初期化する。 # <code>curl_easy_setopt</code>関数を実行して、リクエス…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要



cURLライブラリ

HTTPヘッダの取得例

以下の例では、cURLライブラリを使用してHTTPリクエストを行い、HTTPヘッダのみを取得している。
サンプルコードでは、以下に示すような手順を行っている。

  1. curl_easy_init関数を実行して、cURLハンドルを初期化する。
  2. curl_easy_setopt関数を実行して、リクエスト先のURLと各種オプションを設定する。
    • CURLOPT_URL
      リクエスト先のURLを指定する。
    • CURLOPT_NOBODY
      ボディを取得せずに、HTTPヘッダのみを取得するよう指示する。
    • CURLOPT_HEADER
      レスポンスヘッダを出力するかどうかを設定する。
    • CURLOPT_WRITEFUNCTION
      ボディデータを受信するコールバック関数を指定する。
      HTTPヘッダのみを取得する場合は、コールバック関数内で破棄する。
  3. curl_easy_performを実行して、HTTPリクエストを実行する。
  4. curl_easy_getinfoを実行して、レスポンスコードを取得する。
  5. curl_easy_cleanupを実行して、cURLハンドルを解放する。


 #include <iostream>
 #include <curl/curl.h>
 
 static size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
 {
    // ボディデータを取得する場合はこのコールバック関数内で処理する
    return size * nmemb;
 }
 
 int main()
 {
    CURLcode res;
 
    CURL *curl = curl_easy_init();
    if (!curl) {
       std::cerr << "curl_easy_init() failed" << std::endl;
       return -1;
    }
 
    // URLを設定
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com");
 
    // HTTPヘッダのみを取得するオプション
    curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
    curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
 
    // コールバック関数を設定してボディデータを破棄
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
 
    // HTTPリクエストを実行
    res = curl_easy_perform(curl);
 
    if (res != CURLE_OK) {
       std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
    }
    else {
       // ステータスコードを取得
       res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
       if (res == CURLE_OK) {
          if (response_code == 200) {
             std::cout << "Response code: " << response_code << std::endl;
          }
          else {
             std::cerr << "Error: Response code is " << response_code << std::endl;
          }
       }
       else {
          std::cerr << "curl_easy_getinfo() failed: " << curl_easy_strerror(res) << std::endl;
       }
    }
 
    // cURLのリソースを開放
    curl_easy_cleanup(curl);
 
    return 0;
 }