Отправка HTTP-запроса с базовой аутентификацией

C++:
Отправка HTTP-запроса с базовой аутентификацией

Как это сделать:

Вот базовый пример использования библиотеки CURL на C++. Прежде чем начать, убедитесь, что у вас установлен libcurl.

#include <iostream>
#include <curl/curl.h>

// Простая функция обратного вызова для обработки данных, полученных с помощью curl
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) {
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL *curl;
    CURLcode res;
    std::string readBuffer;

    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://yourapi.com/data");
        curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
        curl_easy_setopt(curl, CURLOPT_PASSWORD, "pass");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
        
        // Выполнение запроса и проверка на наличие ошибок
        res = curl_easy_perform(curl);
        if(res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        } else {
            std::cout << readBuffer << std::endl;
        }
        
        // Очистка
        curl_easy_cleanup(curl);
    }
    return 0;
}

Вы увидите ответ от сервера, выведенный в консоль, если не возникло ошибок.

Глубокое погружение

Базовая аутентификация — это старая методика, которая появилась в начале существования HTTP. Сейчас в индустрии предпочтение отдаётся более безопасным методам, таким как OAuth и токены. Несмотря на это, базовая аутентификация до сих пор используется, часто для внутренних или простых систем, где тяжёлые слои безопасности являются чрезмерным перебором.

Под капотом ваше имя пользователя и пароль кодируются в base64 и помещаются в HTTP-заголовок. Это просто, но не безопасно, если не использовать HTTPS, поскольку base64 легко обратим — использование HTTPS обязательно.

Если libcurl вам не по душе, рассмотрите альтернативы, такие как библиотека cpp-httplib, или можете воспользоваться Boost.Beast для более практичного подхода.

См. также