diff --git a/.gitignore b/.gitignore index a3a52d9..e94e36c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ example/benchmark example/redirect example/sse* example/upload +example/one_time_request +example/server_and_client example/*.pem test/httplib.cc test/httplib.h diff --git a/example/Makefile b/example/Makefile index c073988..7682e10 100644 --- a/example/Makefile +++ b/example/Makefile @@ -53,9 +53,12 @@ benchmark : benchmark.cc ../httplib.h Makefile one_time_request : one_time_request.cc ../httplib.h Makefile $(CXX) -o one_time_request $(CXXFLAGS) one_time_request.cc $(OPENSSL_SUPPORT) $(ZLIB_SUPPORT) $(BROTLI_SUPPORT) +server_and_client : server_and_client.cc ../httplib.h Makefile + $(CXX) -o server_and_client $(CXXFLAGS) server_and_client.cc $(OPENSSL_SUPPORT) $(ZLIB_SUPPORT) $(BROTLI_SUPPORT) + pem: openssl genrsa 2048 > key.pem openssl req -new -key key.pem | openssl x509 -days 3650 -req -signkey key.pem > cert.pem clean: - rm server client hello simplecli simplesvr upload redirect ssesvr ssecli benchmark one_time_request *.pem + rm server client hello simplecli simplesvr upload redirect ssesvr ssecli benchmark one_time_request server_and_client *.pem diff --git a/example/server_and_client.cc b/example/server_and_client.cc new file mode 100644 index 0000000..cc6ec0a --- /dev/null +++ b/example/server_and_client.cc @@ -0,0 +1,45 @@ +// +// server_and_client.cc +// +// Copyright (c) 2024 Yuji Hirose. All rights reserved. +// MIT License +// + +#include +#include +#include +#include + +using namespace httplib; + +const char *HOST = "localhost"; +const int PORT = 1234; + +const std::string JSON_DATA = R"({"hello": "world"})"; + +int main(void) { + Server svr; + + svr.Post("/api", [&](const Request & /*req*/, Response &res) { + res.set_content("Hello World!", "text/plain"); + }); + + auto thread = std::thread([&]() { svr.listen(HOST, PORT); }); + + auto se = detail::scope_exit([&] { + svr.stop(); + thread.join(); + }); + + svr.wait_until_ready(); + + Client cli(HOST, PORT); + + auto res = + cli.Post("/api", Headers(), JSON_DATA.data(), JSON_DATA.size(), + "application/json", [](uint64_t, uint64_t) { return true; }); + + if (res) { + std::cout << res->body << std::endl; + } +} \ No newline at end of file