-
Автор темы
- #1
Всем привет, вместо того чтобы подумать головой мне люди часто писали - "как сделать клауд кфг?", скорее всего они увидели это хайповое название, и просто не стали вникать что это, и как оно работает.
Проект github -
В первую очередь хочу сказать что все файлы конфигов хранят структурированную информацию, в основном это формат json.
Мы будем использовать json - общепринятый стандарт обмена данными между сервером и веб-приложением.
И так, нам понадобиться веб-сервер, который будет хранить наши файлы и принимать реквесты.
На стороне клиента также будем использовать библиотеку
В c++
Создать POST запрос с телом этой самой строки, в которую ранее мы записали наш кфг.
Я буду использовать вариант с использованием моего имени для дальнейшей работы с движком Xenforo.
Теперь нужно чтобы наш веб-сервер смог принять этот запрос, и создал файл и записал в него информацию
Для того чтобы получить строку json с сервера, нужно послать GET запрос, тогда в респонсе мы получим наш результат
Серверная часть:
Как видим ничего сложного нету
Проект github -
Пожалуйста, авторизуйтесь для просмотра ссылки.
В первую очередь хочу сказать что все файлы конфигов хранят структурированную информацию, в основном это формат json.
Мы будем использовать json - общепринятый стандарт обмена данными между сервером и веб-приложением.
И так, нам понадобиться веб-сервер, который будет хранить наши файлы и принимать реквесты.
На стороне клиента также будем использовать библиотеку
Пожалуйста, авторизуйтесь для просмотра ссылки.
для создания реквестов на наш веб-сервер.В c++
Пожалуйста, авторизуйтесь для просмотра ссылки.
имеет сериализованный тип строки, и для того чтобы отправить эту строку на сервер нам нужно:Создать POST запрос с телом этой самой строки, в которую ранее мы записали наш кфг.
Я буду использовать вариант с использованием моего имени для дальнейшей работы с движком Xenforo.
C++:
void c_cfg::upload_cfg(const std::string user_name) {
nlohmann::json json{};
auto& object = json[ "cfg" ];
for ( const auto& var : m_vars )
var->save( object );
auto str = json.dump( );
try
{
http::Request request("http://01.01.01.101/json.php?username=" + user_name + "&upload");
request.send("POST", str, {{"Content-Type", "application/json"} });
}
catch (const std::exception& e)
{
MessageBoxA(0, "request failed, error: ", e.what(), MB_OK);
return;
}
}
PHP:
if ( isset( $_GET[ "username" ] ) )
{
require( 'src/XF.php' );
XF::start( $fileDir );
$app = \XF::setupApp( 'XF\App' );
$ip = $app->request->getIp( );
$finder = \XF::finder( 'XF:User' );
$user = $finder->where( 'username', $_GET[ "username" ] )->fetchOne( );
-- создадим файл в директории 'data/cfg/' с id моего юзера от xf
$file_directory = 'data/cfg/' . $user[ "user_id" ] . '.txt';
if ( isset( $_GET[ "upload" ] ) ) {
$input = json_decode(file_get_contents("php://input"), true);
$f = fopen($file_directory, 'w');
fwrite($f, json_encode($input));
fclose($f);
}
}
C++:
std::string str{};
try
{
http::Request request{ "http://01.01.01.101/json.php?username=" + user_name + "&get" };
const auto response = request.send("GET");
// наш результат
str = std::string{ response.body.begin(), response.body.end() };
}
catch (const std::exception& e)
{
MessageBoxA(0, "request failed, error: ", e.what(), MB_OK);
return;
}
PHP:
else if ( isset( $_GET[ "get" ] ) ) {
if(file_exists($file_directory)) {
$homepage = file_get_contents($file_directory);
echo $homepage;
}
}
Последнее редактирование: