Webserver example for Nuvoton NuMaker boards and mbed OS 5.15 - HTTP 1.1 and multi-threaded.
For Mbed OS 6, please use the NuMaker-simple-httpd example.
This application demonstrates how to run an HTTP server on an mbed OS 5 device. It is derived from http-webserver-example Request parsing is done through nodejs/http-parser.
Fixed for Mbed OS 5.15 or later
Tested on
NuMaker IoT-M487 with Ethernet NuMaker PFM-M487 with Ethernet
source/main.cpp
- Committer:
- morgandu
- Date:
- 2020-06-29
- Revision:
- 2:ff1a293c4df3
- Parent:
- 0:41f820ea137a
File content as of revision 2:ff1a293c4df3:
#include "mbed.h" #include "http_server.h" #include "http_response_builder.h" #define USE_FIXED_IP 1 // 1 for fixed IP, 0 for DHCP DigitalOut led(LED1); // Requests come in here void request_handler(ParsedHttpRequest* request, TCPSocket* socket) { printf("Request came in: %s %s\n", http_method_str(request->get_method()), request->get_url().c_str()); if (request->get_method() == HTTP_GET && request->get_url() == "/") { HttpResponseBuilder builder(200); builder.set_header("Content-Type", "text/html; charset=utf-8"); char response[] = "<html><head><title>Hello from mbed</title></head>" "<body>" "<h1>mbed webserver</h1>" "<button id=\"toggle\">Toggle LED</button>" "<script>document.querySelector('#toggle').onclick = function() {" "var x = new XMLHttpRequest(); x.open('POST', '/toggle'); x.send();" "}</script>" "</body></html>"; builder.send(socket, response, sizeof(response) - 1); } else if (request->get_method() == HTTP_POST && request->get_url() == "/toggle") { printf("toggle LED called\n"); led = !led; HttpResponseBuilder builder(200); builder.send(socket, NULL, 0); } else { HttpResponseBuilder builder(404); builder.send(socket, NULL, 0); } } int main() { // Connect to the network (see mbed_app.json for the connectivity method used) NetworkInterface *network = NetworkInterface::get_default_instance(); if (!network) { printf("Cannot connect to the network, see serial output\n"); return 1; } #if USE_FIXED_IP // This fixed IP address is convenient to test with Windows PC SocketAddress ip_addr("169.254.108.2"); SocketAddress ip_mask("255.255.0.0"); SocketAddress ip_gwaddr("169.254.108.1"); network->set_network(ip_addr, ip_mask, ip_gwaddr); #endif network->connect(); HttpServer server(network); nsapi_error_t res = server.start(80, &request_handler); if (res == NSAPI_ERROR_OK) { SocketAddress ip_addr; network->get_ip_address(&ip_addr); printf("Server is listening at http://%s\n", ip_addr.get_ip_address()); } else { printf("Server could not be started... %d\n", res); } while(1) ThisThread::sleep_for(1000000); }