C++の応用 - HTTP
ナビゲーションに移動
検索に移動
概要
cURLライブラリ
HTTPヘッダの取得例
以下の例では、cURLライブラリを使用してHTTPリクエストを行い、HTTPヘッダのみを取得している。
サンプルコードでは、以下に示すような手順を行っている。
curl_easy_init
関数を実行して、cURLハンドルを初期化する。curl_easy_setopt
関数を実行して、リクエスト先のURLと各種オプションを設定する。- CURLOPT_URL
- リクエスト先のURLを指定する。
- CURLOPT_NOBODY
- ボディを取得せずに、HTTPヘッダのみを取得するよう指示する。
- CURLOPT_HEADER
- レスポンスヘッダを出力するかどうかを設定する。
- CURLOPT_WRITEFUNCTION
- ボディデータを受信するコールバック関数を指定する。
- HTTPヘッダのみを取得する場合は、コールバック関数内で破棄する。
- CURLOPT_URL
curl_easy_perform
を実行して、HTTPリクエストを実行する。curl_easy_getinfo
を実行して、レスポンスコードを取得する。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;
}