C++:
ウェブページのダウンロード
How to / 方法
C++でウェブページをダウンロードするには、ライブラリを使います。ここではcpr
(C++ Requests, Python Requestsライブラリに着想を得たもの)を使用します。cpr
はシンプルかつ現代的なAPIを提供します。
依存関係(cpr
ライブラリ)をインストールします。
vcpkg install cpr
サンプルコード:
#include <cpr/cpr.h>
#include <iostream>
int main() {
cpr::Response r = cpr::Get(cpr::Url{"http://httpbin.org/html"});
if (r.status_code == 200) { // HTTP 200 OK
std::cout << r.text << std::endl; // r.text contains the webpage content
} else {
std::cout << "Failed to retrieve web page." << std::endl;
}
return 0;
}
実行結果:
<!DOCTYPE html>
<html>
<body>
<h1>Herman Melville - Moby-Dick</h1>
...
</body>
</html>
エラーハンドリングは省略していますが、実際のプロジェクトでは必要です。
Deep Dive / 掘り下げ
WebページダウンロードはHTTPプロトコルで行われます。過去にはlibcurl
やBoost.Beast
のような低レベルのライブラリが使われていました。だが、cpr
のような新しいライブラリはもっと簡単にHTTPリクエストを扱えるようになっています。
cpr
はバックエンドでlibcurl
を使用していますが、使用者には簡潔なインターフェースを提供します。このような抽象化により、プログラマはネットワーク通信の複雑さを意識することなく、コードを書くことができます。
別の手段を使うこともできます。例えば、標準C++ライブラリだけでHTTP通信を実装することも可能ですが、多くのボイラープレートコードを必要とし、エラー処理が複雑になります。適切なツールやライブラリを選ぶことで、効率的かつ安全に作業できます。
See Also / 関連リンク
- cpr GitHub リポジトリ: https://github.com/libcpr/cpr
- libcurl (cURL): https://curl.haxx.se/libcurl/
- HTTP プロトコルについて: https://developer.mozilla.org/en-US/docs/Web/HTTP
- Boost.Beast ライブラリ: https://www.boost.org/doc/libs/release/libs/beast/