TolentinoCotesta

Parse GET request

Oct 30th, 2020 (edited)
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. bool hasParams (const char * const &data, const char * const &param = NULL)
  2. {
  3.     const char * paramPos;
  4.    
  5.     if(param == NULL)
  6.         paramPos = strchr (data, '?');
  7.     else
  8.         paramPos = strstr(data, param);
  9.        
  10.     if (paramPos == NULL)
  11.         return false;  // no parameters
  12.     else
  13.         return true;
  14. }
  15.  
  16. char * getParam(const char * const &data, const char * const &param)
  17. {
  18.     // Posizione di inizio del parametro cercato
  19.     const char *paramPos = strstr(data, param) + strlen(param) +1;
  20.    
  21.     // Posizione di fine del parametro cercato
  22.     const char *endPos = strchr(paramPos, '&');
  23.    
  24.     // Nessun '&', quindi c'è un solo parametro
  25.     if (endPos == NULL)  
  26.         // Posizione dello spazio finale prima di HTTP/1.1
  27.         endPos = strchr(paramPos, ' ');    
  28.    
  29.     size_t len = endPos - paramPos;
  30.     char* buf = new char[len + 1];
  31.     strncpy ( buf, paramPos, len );
  32.    
  33.     // aggiungiamo il terminatore di stringa e ritorniamo il valore trovato
  34.     buf[len] = '\0';
  35.     return buf;
  36. }  
  37.  
  38.  
  39. //////////////////////////////////// esempio di utilizzo ////////////////////////////////////
  40.  
  41.     //const char* request = "GET /?param1=123456&parma2=ciamo&param2=mondo HTTP/1.1";
  42.  
  43.     // Se si ha una String oppure una std::string
  44.     String clientReq = "GET /?param1=123456&parma2=ciamo&param2=mondo HTTP/1.1";
  45.     const char* request = clientReq.c_str();
  46.    
  47.     // Controllo solo se ci sono dei parametri nella stringa
  48.     if(hasParams(request)){
  49.        char*  param1 = getParam(request, "param1");
  50.        Serial.print("\nParam1: ");
  51.        Serial.println(param1);
  52.  
  53.        char*  param2 = getParam(request, "param2");
  54.        Serial.print("\nParam2: ");
  55.        Serial.println(param2);
  56.     }
  57.  
  58.     // Controllo se c'è il parametro specifico nella stringa
  59.     if(hasParams(request, "param3")){        
  60.        char*  param3 = getParam(request, "param3");
  61.        Serial.print("\nParam3: ");
  62.        Serial.println(param3);
  63.     }
  64.  
  65.  
Add Comment
Please, Sign In to add comment