Skip to main content

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);
  
}