Как стать автором
Обновить

использование libcurl для доступа к https

Время на прочтение 4 мин
Количество просмотров 15K
иногда требуется получить кое какие данные со страничек отчётов и сохранить локально. для обычных страничек проблем не возникало, но вот захотелось получать баланс счета у местного провайдера, а доступ к этой страничке есть только по https.


для этого пришлось воспользоваться библиотекой libcurl (http://curl.haxx.se/libcurl/)
как-то до этого обходился и без неё. 8)

вот пример того что у меня получилось

/*
 * использование cURL для доступа к HTTPS
 */



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

// функция, вызываемая cURL для записи полученых данных
std::string curlBuffer;
size_t curlWriteFunc(char *data, size_t size, size_t nmemb, std::string *buffer)  
{  
        size_t result = 0;  

        if (buffer != NULL)  
        {  
                buffer->append(data, size * nmemb);  
                result = size * nmemb;  
        }  
        return result;  
}  



//
//
//
int main(int argc, char *argv[])
{
        // запрашиваемая страничка(путь до login screen)
        const char *url = "МОЙ_ПРОВАЙДЕР/cgi-bin/utm5/aaa5";
        // передаваемые параметры
        const char *urlPOST = "login=ИМЯ&password=ПАСС&cmd=login";

        // буфер для сохранения текстовых ошибок
        char curlErrorBuffer[CURL_ERROR_SIZE];

        CURL *curl = curl_easy_init();
        if (curl) {
                //
                curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curlErrorBuffer);
               
                // задаем URL...
                curl_easy_setopt(curl, CURLOPT_URL, url);
                // переходить по "Location:" указаному в HTTP заголовке  
                curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
                // не проверять сертификат удаленного сервера
                curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, O);
                // использовать метод POST для отправки данных
                curl_easy_setopt(curl, CURLOPT_POST, 1);
                // параметры POST
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, urlPOST);
                // функция, вызываемая cURL для записи полученых данных
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &curlBuffer);
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWriteFunc);

                // выполнить запрос
                CURLcode curlResult = curl_easy_perform(curl);
                // завершение сеанса
                curl_easy_cleanup(curl);

                if (curlResult == CURLE_OK)
                {
                        std::cout << curlBuffer << std::endl;
                        return(0);
                } else {
                        std::cout << "Ошибка(" << curlResult << "): " << curlErrorBuffer << std::endl;
                        return(-1);
                }
       
        }
        return 0;
}


вот так прошло моё знакомство с этой библиотекой.
ммм… наверное надо сделать автоматическое получение и установку сертификата, пока задумываюсь, а стоит ли это вообще делать. 8)
лучше пока скачаю обертку для с++

______________________
Текст подготовлен в Хабра Редакторе от © SoftCoder.ru
Теги:
Хабы:
0
Комментарии 6
Комментарии Комментарии 6

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн