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

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
4行目: 4行目:


== cURLライブラリ ==
== cURLライブラリ ==
==== cURLライブラリとは ====
その他の様々な通信方法を知りたい場合は、[https://curl.se/libcurl/c/example.html cURLの公式Webサイト]からサンプルコードを閲覧することができる。<br>
<br>
==== HTTPヘッダの取得例 ====
==== HTTPヘッダの取得例 ====
以下の例では、cURLライブラリを使用してHTTPリクエストを行い、HTTPヘッダのみを取得している。<br>
以下の例では、cURLライブラリを使用してHTTPリクエストを行い、HTTPヘッダのみを取得している。<br>

2024年3月29日 (金) 03:07時点における版

概要



cURLライブラリ

cURLライブラリとは

その他の様々な通信方法を知りたい場合は、cURLの公式Webサイトからサンプルコードを閲覧することができる。

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