Заголовки запроса в C++
Заголовки запроса - пары имя и значение, которые идут до тела.
В libcurl их собирают в связный список
curl_slist и передают опцией
CURLOPT_HTTPHEADER. После обмена список
освобождают через curl_slist_free_all.
Зададим тип принимаемого текста и выведем тело
ответа:
#include <iostream>
#include <string>
#include <curl/curl.h>
size_t writeBody(
char* ptr,
size_t size,
size_t nmemb,
void* userdata
) {
auto* body = static_cast<std::string*>(userdata);
body->append(ptr, size * nmemb);
return size * nmemb;
}
int main() {
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL* curl = curl_easy_init();
std::string body;
curl_slist* headers = nullptr;
headers = curl_slist_append(
headers,
"Accept: text/plain"
);
curl_easy_setopt(
curl,
CURLOPT_URL,
"https://example.com/"
);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeBody);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &body);
CURLcode res = curl_easy_perform(curl);
if (res == CURLE_OK) {
std::cout << body << "\n";
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
curl_global_cleanup();
return res == CURLE_OK ? 0 : 1;
}
Собственные имена вроде "X-Trace" тоже
уходят на сервер. Их часто используют для меток
трассировки или версии клиента:
#include <iostream>
#include <string>
#include <curl/curl.h>
size_t writeBody(
char* ptr,
size_t size,
size_t nmemb,
void* userdata
) {
auto* body = static_cast<std::string*>(userdata);
body->append(ptr, size * nmemb);
return size * nmemb;
}
int main() {
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL* curl = curl_easy_init();
std::string body;
curl_slist* headers = nullptr;
headers = curl_slist_append(
headers,
"X-Trace: alpha-7"
);
curl_easy_setopt(
curl,
CURLOPT_URL,
"https://example.com/"
);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeBody);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &body);
CURLcode res = curl_easy_perform(curl);
if (res == CURLE_OK) {
std::cout << body << "\n";
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
curl_global_cleanup();
return res == CURLE_OK ? 0 : 1;
}
Отправьте чтение на "https://example.com/"
с полем "Accept-Language" равным "ru".
Выведите тело ответа.
Выведите тело ответа для
"https://example.com/", если в запрос
добавлено поле "X-Client" со значением
"desk".