MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C++の応用 - HTTPのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C++の応用 - HTTP
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == HTTP (Hypertext Transfer Protocol) は、Web上でデータを転送するためのプロトコルである。<br> クライアントサーバモデルに基づいており、テキストベースのリクエストレスポンス方式である。<br> <br> HTTPの主な特徴を、以下に示す。<br> * ステートレス *: 各リクエストは独立して処理される。 * メソッド *: GET、POST、PUT、DELETE等がある。 * ヘッダ *: リクエストとレスポンスに関する追加情報を含む。 * ステータスコード *: サーバからの応答状態を示す。 *: 例: 200 OK、 404 Not Found <br> C++でHTTP通信を実装する場合は、一般的には、libcurlライブラリやBoost.Beastライブラリ等を使用することが多い。<br> <br><br> == cURLライブラリ == ==== cURLライブラリとは ==== その他の様々な通信方法を知りたい場合は、[https://curl.se/libcurl/c/example.html cURLの公式Webサイト]からサンプルコードを閲覧することができる。<br> <br> ==== cURLライブラリのインストール ==== ===== パッケージ管理システムからインストール ===== # RHEL sudo dnf install curl # SUSE sudo zypper install curl <br> ===== ソースコードからインストール ===== もし、別途インストールする必要がある場合、ソースコードからcurlをインストールする。<br> <br> curlのビルドに必要なライブラリをインストールする。<br> # SUSE sudo zypper install make cmake gcc perl libopenssl-devel libopenssl-1_1-devel libzstd-devel c-ares-devel libpsl-devel \ libssh-devel # オプション : libSSHライブラリを使用する場合 libssh2-devel # オプション : libSSH2ライブラリを使用する場合 libgnutls-devel # オプション : GNU TLSライブラリを使用する場合 mbedtls-devel # オプション : Mbed TLSライブラリを使用する場合 libnghttp2-devel # オプション : NGHTTPライブラリを使用する場合 libheimdal-devel # オプション : GSSを使用する場合 <br> [https://curl.se/download.html curlの公式Webサイト]、または、[https://github.com/curl/curl curlのGithub]にアクセスして、ソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf curl-<バージョン>.tar.xz cd curl-<バージョン> <br> curlをビルドおよびインストールする。<br> mkdir build && cd build # Configureスクリプトを使用する場合 ../configure --prefix=<curlのインストールディレクトリ> \ --with-openssl \ --with-gnutls # オプション : GNUTLSを使用する場合 --with-wolfssl # オプション : WolfSSLを使用する場合 # CMakeを使用する場合 cmake .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=<CURLのインストールディレクトリ> \ -DENABLE_ARES=ON \ # C Aresを有効にする場合 -DCURL_USE_GNUTLS=ON \ # GNU TLSを有効にする場合 -DCURL_USE_MBEDTLS=ON \ # Mbed TLSを有効にする場合 -DCURL_USE_WOLFSSL=ON \ # Wolf SSLを有効にする場合 -DUSE_NGHTTP2=ON \ # NG Httpを有効にする場合 -DCURL_USE_GSSAPI=ON # GSS APIを有効にする場合 make -j $(nproc) make install <br> ==== HTTPヘッダの取得例 ==== 以下の例では、cURLライブラリを使用してHTTPリクエストを行い、HTTPヘッダのみを取得している。<br> もし、ステータスコードが200以外の場合は、エラーメッセージを出力している。<br> <br> サンプルコードでは、以下に示すような手順を行っている。<br> <br> # <code>curl_easy_init</code>関数を実行して、cURLハンドルを初期化する。 # <code>curl_easy_setopt</code>関数を実行して、リクエスト先のURLと各種オプションを設定する。 #* CURLOPT_URL #*: リクエスト先のURLを指定する。 #* CURLOPT_NOBODY #*: ボディを取得せずに、HTTPヘッダのみを取得するよう指示する。 #* CURLOPT_HEADER #*: レスポンスヘッダを出力するかどうかを設定する。 #* CURLOPT_WRITEFUNCTION #*: ボディデータを受信するコールバック関数を指定する。 #*: HTTPヘッダのみを取得する場合は、コールバック関数内で破棄する。 # <code>curl_easy_perform</code>を実行して、HTTPリクエストを実行する。 # <code>curl_easy_getinfo</code>を実行して、レスポンスコードを取得する。 # <code>curl_easy_cleanup</code>を実行して、cURLハンドルを解放する。 <br> <syntaxhighlight lang="c++"> #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 { // ステータスコードを取得 long response_code = 0L; 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; } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:C++]]
C++の応用 - HTTP
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse