Browse Source

Added redirect exampe

yhirose 6 years ago
parent
commit
0b2c506ca4
2 changed files with 61 additions and 2 deletions
  1. 5 2
      example/Makefile
  2. 56 0
      example/redirect.cc

+ 5 - 2
example/Makefile

@@ -4,7 +4,7 @@ CXXFLAGS = -std=c++14 -I.. -Wall -Wextra -lpthread
 OPENSSL_SUPPORT = -DCPPHTTPLIB_OPENSSL_SUPPORT -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib -lssl -lcrypto
 ZLIB_SUPPORT = -DCPPHTTPLIB_ZLIB_SUPPORT -lz
 
-all: server client hello simplesvr benchmark
+all: server client hello simplesvr redirect benchmark
 
 server : server.cc ../httplib.h Makefile
 	$(CXX) -o server $(CXXFLAGS) server.cc $(OPENSSL_SUPPORT) $(ZLIB_SUPPORT)
@@ -18,6 +18,9 @@ hello : hello.cc ../httplib.h Makefile
 simplesvr : simplesvr.cc ../httplib.h Makefile
 	$(CXX) -o simplesvr $(CXXFLAGS) simplesvr.cc $(OPENSSL_SUPPORT) $(ZLIB_SUPPORT)
 
+redirect : redirect.cc ../httplib.h Makefile
+	$(CXX) -o redirect $(CXXFLAGS) redirect.cc $(OPENSSL_SUPPORT) $(ZLIB_SUPPORT)
+
 benchmark : benchmark.cc ../httplib.h Makefile
 	$(CXX) -o benchmark $(CXXFLAGS) benchmark.cc $(OPENSSL_SUPPORT) $(ZLIB_SUPPORT)
 
@@ -26,4 +29,4 @@ pem:
 	openssl req -new -key key.pem | openssl x509 -days 3650 -req -signkey key.pem > cert.pem
 
 clean:
-	rm server client hello simplesvr *.pem
+	rm server client hello simplesvr redirect *.pem

+ 56 - 0
example/redirect.cc

@@ -0,0 +1,56 @@
+//
+//  redirect.cc
+//
+//  Copyright (c) 2019 Yuji Hirose. All rights reserved.
+//  MIT License
+//
+
+#include <httplib.h>
+
+#define SERVER_CERT_FILE "./cert.pem"
+#define SERVER_PRIVATE_KEY_FILE "./key.pem"
+
+using namespace httplib;
+
+int main(void) {
+  // HTTP server
+  Server http;
+
+  http.Get("/test", [](const Request & /*req*/, Response &res) {
+    res.set_content("Test\n", "text/plain");
+  });
+
+  http.set_error_handler([](const Request & /*req*/, Response &res) {
+    res.set_redirect("https://localhost:8081/");
+  });
+
+  // HTTPS server
+  SSLServer https(SERVER_CERT_FILE, SERVER_PRIVATE_KEY_FILE);
+
+  https.Get("/", [=](const Request & /*req*/, Response &res) {
+    res.set_redirect("/hi");
+  });
+
+  https.Get("/hi", [](const Request & /*req*/, Response &res) {
+    res.set_content("Hello World!\n", "text/plain");
+  });
+
+  https.Get("/stop", [&](const Request & /*req*/, Response & /*res*/) {
+    https.stop();
+    http.stop();
+  });
+
+  // Run servers
+  auto httpThread = std::thread([&]() {
+    http.listen("localhost", 8080);
+  });
+
+  auto httpsThread = std::thread([&]() {
+    https.listen("localhost", 8081);
+  });
+
+  httpThread.join();
+  httpsThread.join();
+
+  return 0;
+}