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();
}


Вывод:



Комментарии