ESP32 HTTP float query parser with range check example using HumanESPHTTP
Example for HumanESPHTTP
static const httpd_uri_t setPowerHandler = {
.uri = "/api/set-power",
.method = HTTP_GET,
.handler = [](httpd_req_t *request) {
QueryURLParser parser(request);
if(parser.HasParameter("power")) {
std::string power = parser.GetParameter("power");
// Parse power as float
float powerFloat;
try {
powerFloat = std::stof(power);
} catch (const std::invalid_argument& e) {
httpd_resp_set_status(request, "400 Bad Request");
httpd_resp_set_type(request, "text/plain");
httpd_resp_sendstr(request, "Error: Invalid argument for power parameter (not a float)!");
return ESP_OK;
}
// Check range
if(powerFloat < 0.0 || powerFloat > 1.0) {
httpd_resp_set_status(request, "400 Bad Request");
httpd_resp_set_type(request, "text/plain");
httpd_resp_sendstr(request, "Error: Invalid argument for power parameter (not in range 0.0 ... 1.0)!");
return ESP_OK;
}
// TODO: Your code goes here
// Example code: send back power
httpd_resp_send_chunk(request, "Power is: ", HTTPD_RESP_USE_STRLEN);
httpd_resp_send_chunk(request, std::to_string(powerFloat).c_str(), HTTPD_RESP_USE_STRLEN);
httpd_resp_send_chunk(request, nullptr, 0); // Finished
} else {
httpd_resp_set_type(request, "text/plain");
httpd_resp_set_status(request, "400 Bad Request");
httpd_resp_sendstr(request, "No 'power' query parameter found!");
}
return ESP_OK;
}
};