summaryrefslogtreecommitdiffstats
path: root/ml/dlib/examples/server_http_ex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/examples/server_http_ex.cpp')
-rw-r--r--ml/dlib/examples/server_http_ex.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/ml/dlib/examples/server_http_ex.cpp b/ml/dlib/examples/server_http_ex.cpp
new file mode 100644
index 00000000..99914c14
--- /dev/null
+++ b/ml/dlib/examples/server_http_ex.cpp
@@ -0,0 +1,108 @@
+// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
+/*
+
+ This example illustrates the use of the HTTP extension to the server object
+ from the dlib C++ Library.
+ It creates a server that always responds with a simple HTML form.
+
+ To view the page this program displays you should go to http://localhost:5000
+
+*/
+
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <dlib/server.h>
+
+using namespace dlib;
+using namespace std;
+
+class web_server : public server_http
+{
+ const std::string on_request (
+ const incoming_things& incoming,
+ outgoing_things& outgoing
+ )
+ {
+ ostringstream sout;
+ // We are going to send back a page that contains an HTML form with two text input fields.
+ // One field called name. The HTML form uses the post method but could also use the get
+ // method (just change method='post' to method='get').
+ sout << " <html> <body> "
+ << "<form action='/form_handler' method='post'> "
+ << "User Name: <input name='user' type='text'><br> "
+ << "User password: <input name='pass' type='text'> <input type='submit'> "
+ << " </form>";
+
+ // Write out some of the inputs to this request so that they show up on the
+ // resulting web page.
+ sout << "<br> path = " << incoming.path << endl;
+ sout << "<br> request_type = " << incoming.request_type << endl;
+ sout << "<br> content_type = " << incoming.content_type << endl;
+ sout << "<br> protocol = " << incoming.protocol << endl;
+ sout << "<br> foreign_ip = " << incoming.foreign_ip << endl;
+ sout << "<br> foreign_port = " << incoming.foreign_port << endl;
+ sout << "<br> local_ip = " << incoming.local_ip << endl;
+ sout << "<br> local_port = " << incoming.local_port << endl;
+ sout << "<br> body = \"" << incoming.body << "\"" << endl;
+
+
+ // If this request is the result of the user submitting the form then echo back
+ // the submission.
+ if (incoming.path == "/form_handler")
+ {
+ sout << "<h2> Stuff from the query string </h2>" << endl;
+ sout << "<br> user = " << incoming.queries["user"] << endl;
+ sout << "<br> pass = " << incoming.queries["pass"] << endl;
+
+ // save these form submissions as cookies.
+ outgoing.cookies["user"] = incoming.queries["user"];
+ outgoing.cookies["pass"] = incoming.queries["pass"];
+ }
+
+
+ // Echo any cookies back to the client browser
+ sout << "<h2>Cookies the web browser sent to the server</h2>";
+ for ( key_value_map::const_iterator ci = incoming.cookies.begin(); ci != incoming.cookies.end(); ++ci )
+ {
+ sout << "<br/>" << ci->first << " = " << ci->second << endl;
+ }
+
+ sout << "<br/><br/>";
+
+ sout << "<h2>HTTP Headers the web browser sent to the server</h2>";
+ // Echo out all the HTTP headers we received from the client web browser
+ for ( key_value_map_ci::const_iterator ci = incoming.headers.begin(); ci != incoming.headers.end(); ++ci )
+ {
+ sout << "<br/>" << ci->first << ": " << ci->second << endl;
+ }
+
+ sout << "</body> </html>";
+
+ return sout.str();
+ }
+
+};
+
+int main()
+{
+ try
+ {
+ // create an instance of our web server
+ web_server our_web_server;
+
+ // make it listen on port 5000
+ our_web_server.set_listening_port(5000);
+ // Tell the server to begin accepting connections.
+ our_web_server.start_async();
+
+ cout << "Press enter to end this program" << endl;
+ cin.get();
+ }
+ catch (exception& e)
+ {
+ cout << e.what() << endl;
+ }
+}
+
+