POST передает данные в теле запроса, а не в строке адреса. В libcurl включают его опцией CURLOPT_POST, а строку формы задают через CURLOPT_POSTFIELDS.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpHtPst 653 of 696 menu
◀ ▶

Запрос POST в C++

Метод POST передает данные в теле запроса, а не в строке адреса.

В libcurl включают его опцией CURLOPT_POST, а строку формы задают через CURLOPT_POSTFIELDS. Тип "application/x-www-form-urlencoded" добавляют заголовком "Content-Type". Отправим поля и выведем ответ сервера:

#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; std::string payload = "sku=axle&count=3"; curl_slist* headers = nullptr; headers = curl_slist_append( headers, "Content-Type: application/x-www-form-urlencoded" ); curl_easy_setopt( curl, CURLOPT_URL, "https://example.com/" ); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt( curl, CURLOPT_POSTFIELDS, payload.c_str() ); 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; }

Код ответа читают так же через CURLINFO_RESPONSE_CODE. Для example.com POST часто возвращает 405, но тело все равно можно вывести:

#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; std::string payload = "note=ship&priority=low"; curl_slist* headers = nullptr; headers = curl_slist_append( headers, "Content-Type: application/x-www-form-urlencoded" ); curl_easy_setopt( curl, CURLOPT_URL, "https://example.com/" ); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt( curl, CURLOPT_POSTFIELDS, payload.c_str() ); 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) { long code = 0; curl_easy_getinfo( curl, CURLINFO_RESPONSE_CODE, &code ); std::cout << code << "\n"; 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/" форму с полями "user" равным "mia" и "role" равным "editor". Выведите тело ответа одной строкой.

Выведите код ответа и полное тело после POST с одним полем "token" равным "demo" на "https://example.com/".

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить