「C++の応用 - HTTP」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == <br><br> == cURLライブラリ == ==== HTTPヘッダの取得例 ==== 以下の例では、cURLライブラリを使用してHTTPリクエストを行い、HTTPヘッダのみを取得している。<br> サンプルコードでは、以下に示すような手順を行っている。<br> <br> # <code>curl_easy_init</code>関数を実行して、cURLハンドルを初期化する。 # <code>curl_easy_setopt</code>関数を実行して、リクエス…」)
 
62行目: 62行目:
       // ステータスコードを取得
       // ステータスコードを取得
       res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
       res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
       if (res == CURLE_OK) {
       if (response_code != 200) {
          if (response_code == 200) {
           std::cerr << "Error: HTTP status code " << response_code << std::endl;
            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;
       }
       }
     }
     }

2024年3月28日 (木) 23:41時点における版

概要



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 (response_code != 200) {
          std::cerr << "Error: HTTP status code " << response_code << std::endl;
       }
    }
 
    // cURLのリソースを開放
    curl_easy_cleanup(curl);
 
    return 0;
 }