cpp-httplib: инсталляция, создание приложения
Адрес: https://github.com/yhirose/cpp-httplib
cpp-httplib
Библиотека состоит из единственного заголовочного файла (C++11)
Для использования просто включаем в код httplib.h .
Особенность реализации: многонитевая, "блокирующая".
Установка:
d:\
cd cpp\lib
git clone https://github.com/yhirose/cpp-httplib.git
Всё, можно пользоваться.
Библиотека может использовать zlib, а также openssl. При необходимости, эти модули следует установить и указать их при построении приложении.
Пример приложения, использующего httplib:
Запустить MSVS 2019 -> Create a new project -> Console App -> Project name: test-httplib; Location: D:\Cpp\Prj -> Create.
Свойства проекта:
Alt->Project->Options->General Properties->VC++ Directories-> Inclide Directoies:D:\Cpp\Lib\cpp-httplib;<>
Добавляем в код ссылку на файл:
#include "httplib.h"
Код примера:
#include <iostream> #include <httplib.h> using namespace httplib; using namespace std; const char* HOST = "localhost"; const int PORT = 1234; int main() { Server svr; // Сервер. Будет работать в отдельной нити svr.Get(R"(/book=([\w\s\.]+))", [](const Request& req, Response& res) // Шаблон запроса GET и код обработки { // Шаблон - регулярное выражение. Допустимы символы алфавитно(лат)-цифровые, пробелы и точка(.) auto fn = req.matches[1]; // Первая группа регулярки (то, что в круглых скобках) cout << "Server: "<<fn << endl; // Лог res.body = "Echo: " + fn.str(); // Ответ } ); svr.Get(R"(/stop)", [&svr](const Request& req, Response& res) { svr.stop(); }); thread svr_thread = thread([&]() { svr.listen(HOST, PORT); }); // Запуск сервера while (!svr.is_running()) // Ждем запуска сервера this_thread::sleep_for(std::chrono::milliseconds(1)); //------------- Клиент Client cli(HOST, PORT); auto res = cli.Get(R"(/book=ProgramDesign.txt)"); // Запрос if (res) { cout <<"Client, status:" << res->status <<endl; cout <<"Client, body:" << res->body <<endl; } res = cli.Get(R"(/stop)"); svr_thread.join(); }
Вывод:
Комментарии
Отправить комментарий