Read querystring
Alter the config, so the uri_match_fn is wildcard match
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
config.server_port = 80;
config.uri_match_fn = httpd_uri_match_wildcard;
httpd_uri_t index_uri = {
.uri = "/*",
.method = HTTP_GET,
.handler = file_handler,
.user_ctx = NULL
};
In the file handler, one can now start to retrieve the query string url.com?test=anser
char query[100];
size_t query_len = sizeof(query);
// Get the query string
if (httpd_req_get_url_query_str(req, query, query_len) == ESP_OK) {
ESP_LOGI(TAG, "Found URL query => %s", query);
// Parse specific query parameters
char param[32];
if (httpd_query_key_value(query, "param", param, sizeof(param)) == ESP_OK) {
ESP_LOGI(TAG, "Found URL query parameter => param=%s", param);
}
}
This comes together in this sample:
#include "esp_http_server.h"
#include
static const char *TAG = "example";
// Replace with your network credentials
const char* ssid = "YourWifi";
const char* password = "YourPass";
httpd_handle_t stream_httpd = NULL;
httpd_handle_t camera_httpd = NULL;
static esp_err_t file_handler(httpd_req_t *req) {
char query[100];
size_t query_len = sizeof(query);
// Get the query string
if (httpd_req_get_url_query_str(req, query, query_len) == ESP_OK) {
ESP_LOGI(TAG, "Found URL query => %s", query);
// Parse specific query parameters
char param[32];
if (httpd_query_key_value(query, "param", param, sizeof(param)) == ESP_OK) {
ESP_LOGI(TAG, "Found URL query parameter => param=%s", param);
}
}
Serial.printf("File handler");
char ret_homepage[255] = "";
strcpy(ret_homepage,"Hello world");
/* Set some custom headers */
httpd_resp_set_hdr(req, "Connection", "close");
httpd_resp_set_hdr(req, "Cache-Control", "no-cache");
/* Send response with custom headers and body set as the
* string passed in user context*/
const char *resp_str = (const char*) ret_homepage;
Serial.print(ret_homepage);
httpd_resp_send(req, resp_str, HTTPD_RESP_USE_STRLEN);
ESP_LOGI(TAG, "Response sent for home page request.Time:%s",esp_log_system_timestamp());
return ESP_OK;
}
void StartServer(){
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
config.server_port = 80;
config.uri_match_fn = httpd_uri_match_wildcard;
httpd_uri_t index_uri = {
.uri = "/*",
.method = HTTP_GET,
.handler = file_handler,
.user_ctx = NULL
};
Serial.printf("Starting server on port: '%d'\n", config.server_port);
if (httpd_start(&stream_httpd, &config) == ESP_OK) {
httpd_register_uri_handler(stream_httpd, &index_uri);
}
}
void setup() {
Serial.begin(115200);
Serial.setDebugOutput(true);
Serial.println("Started");
Serial.println("Wifi");
// Wi-Fi connection
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("Camera Stream Ready! Go to: http://");
Serial.println(WiFi.localIP());
Serial.println("Start Server");
StartServer();
}
void loop() {
Serial.println("Loop");
//s_listFiles("/sdcard");
// captureImage();
delay(10000);
}