bashttp mini web server

 

What is it

It’s a micro web server that features php and web service extension

Build

Dependencies: Poco c++ libraries

For linux:

1
2
3
4
5
~/bashttp $ rm -rf build/
~/bashttp $ mkdir -p build/debug
~/bashttp $ cd build/debug/
~/bashttp $ cmake ../.. -DCMAKE_BUILD_TYPE=Debug
~/bashttp $ make

For windows use cmake-gui from http://www.cmake.org/.

How to run

To run it

1
2
~/bashttp $ bashttp 8888 doc_root
bashttp listening on 127.0.0.1:8888

Where 8888 is the port and ‘doc_root’ is the document root directory

To stop it simply press ctr+c

Configuration and test files

miniwebserver-files

doc_root: document root directory

doc_root/index.html: html test page

doc_root/index.php: php test page

mime.conf: mime configuration. Must be in execution directory.

/etc/alternatives/php-cgi: php binary for linux

php.cgi.exe: php binary for windows. Must be in execution directory.

😈 Execute shell from browser 😈

Screenshot from 2014-04-19 07:08:56

Write a new web service

Example of service that would be called as ‘http://server/newservice’:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class NewService : public MiniWebService
{
public:
    virtual void exec(const Poco::Net::HTTPServerRequest& request,
                        std::map<std::string, std::string> &query,
                        Poco::Net::HTTPServerResponse& response,
                        Poco::Net::StreamSocket& sock,
                        Poco::Net::HTTPServerSession& session)
    {
        std::ostream& ostr = response.send();
        ostr << "it works.";
        ostr.flush();
    }

    static std::string name() { return "newservice"; }
};

Where:

  • name() method returns the web service identifier as seen in url
  • exec(…) implements the web service.

Add it to server before start it

1
2
std::shared_ptr svc(new NewService());
server.addService(NewService::name(), svc);

Download

download here.