mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2025-05-10 01:33:53 +00:00
added simplesvr sample.
This commit is contained in:
parent
20fa4ba3b4
commit
292d1aeff7
1
.gitignore
vendored
1
.gitignore
vendored
@ -3,6 +3,7 @@ tags
|
||||
example/server
|
||||
example/client
|
||||
example/hello
|
||||
example/simplesvr
|
||||
test/test
|
||||
test/test.xcodeproj/xcuser*
|
||||
test/test.xcodeproj/*/xcuser*
|
||||
|
@ -9,7 +9,7 @@ CC = g++
|
||||
CFLAGS = -std=c++11 -g
|
||||
endif
|
||||
|
||||
all: server client hello
|
||||
all: server client hello simplesvr
|
||||
|
||||
server : server.cc ../httplib.h
|
||||
$(CC) -o server $(CFLAGS) -I.. server.cc
|
||||
@ -19,3 +19,6 @@ client : client.cc ../httplib.h
|
||||
|
||||
hello : hello.cc ../httplib.h
|
||||
$(CC) -o hello $(CFLAGS) -I.. hello.cc
|
||||
|
||||
simplesvr : simplesvr.cc ../httplib.h
|
||||
$(CC) -o simplesvr $(CFLAGS) -I.. simplesvr.cc
|
||||
|
88
example/simplesvr.cc
Normal file
88
example/simplesvr.cc
Normal file
@ -0,0 +1,88 @@
|
||||
//
|
||||
// simplesvr.cc
|
||||
//
|
||||
// Copyright (c) 2013 Yuji Hirose. All rights reserved.
|
||||
// The Boost Software License 1.0
|
||||
//
|
||||
|
||||
#include <httplib.h>
|
||||
#include <cstdio>
|
||||
#include <iostream>
|
||||
|
||||
using namespace httplib;
|
||||
using namespace std;
|
||||
|
||||
string dump_headers(const MultiMap& headers)
|
||||
{
|
||||
string s;
|
||||
char buf[BUFSIZ];
|
||||
|
||||
for (const auto& x: headers) {
|
||||
snprintf(buf, sizeof(buf), "%s: %s\n", x.first.c_str(), x.second.c_str());
|
||||
s += buf;
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
string log(const Request& req, const Response& res)
|
||||
{
|
||||
string s;
|
||||
char buf[BUFSIZ];
|
||||
|
||||
s += "================================\n";
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s %s", req.method.c_str(), req.url.c_str());
|
||||
s += buf;
|
||||
|
||||
string query;
|
||||
for (auto it = req.params.begin(); it != req.params.end(); ++it) {
|
||||
const auto& x = *it;
|
||||
snprintf(buf, sizeof(buf), "%c%s=%s",
|
||||
(it == req.params.begin()) ? '?' : '&', x.first.c_str(), x.second.c_str());
|
||||
query += buf;
|
||||
}
|
||||
snprintf(buf, sizeof(buf), "%s\n", query.c_str());
|
||||
s += buf;
|
||||
|
||||
s += dump_headers(req.headers);
|
||||
|
||||
s += "--------------------------------\n";
|
||||
|
||||
snprintf(buf, sizeof(buf), "%d\n", res.status);
|
||||
s += buf;
|
||||
s += dump_headers(res.headers);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
int main(int argc, const char** argv)
|
||||
{
|
||||
Server svr;
|
||||
|
||||
svr.set_error_handler([](const Request& req, Response& res) {
|
||||
const char* fmt = "<p>Error Status: <span style='color:red;'>%d</span></p>";
|
||||
char buf[BUFSIZ];
|
||||
snprintf(buf, sizeof(buf), fmt, res.status);
|
||||
res.set_content(buf, "text/html");
|
||||
});
|
||||
|
||||
svr.set_logger([](const Request& req, const Response& res) {
|
||||
cout << log(req, res);
|
||||
});
|
||||
|
||||
int port = 8080;
|
||||
if (argc > 1) {
|
||||
port = atoi(argv[1]);
|
||||
}
|
||||
|
||||
if (argc > 2) {
|
||||
svr.set_base_dir(argv[2]);
|
||||
}
|
||||
|
||||
svr.listen("localhost", port);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// vim: et ts=4 sw=4 cin cino={1s ff=unix
|
Loading…
x
Reference in New Issue
Block a user