Параметры адреса в C++
Параметры строки запроса - это пары
"имя=значение" после знака "?"
в адресе.
Несколько пар разделяют "&". Отдельного
построителя в libcurl нет: вся строка,
включая query, попадает в опцию URL. Запишем адрес
с одним параметром и выведем тело ответа:
#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_easy_setopt(
curl,
CURLOPT_URL,
"https://example.com/?item=pen"
);
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_easy_cleanup(curl);
curl_global_cleanup();
return res == CURLE_OK ? 0 : 1;
}
Несколько параметров пишут в одной строке через
"&". Пробелы и спецсимволы кодируют по
правилам URI, иначе сервер может отклонить адрес:
#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_easy_setopt(
curl,
CURLOPT_URL,
"https://example.com/?item=pen&color=blue"
);
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_easy_cleanup(curl);
curl_global_cleanup();
return res == CURLE_OK ? 0 : 1;
}
Выведите тело ответа для
"https://example.com/?city=omsk".
Отправьте чтение с параметрами "page"
равным "2" и "lang" равным
"ru" на "https://example.com/".
Напечатайте полное тело ответа.