2017-03-29 2 views
0

J'ai des problèmes avec la réponse de mon serveur. Je dois ignorer tous ces en-têtes dans la réponse.Comment ignorer tous les en-têtes dans la réponse ESP8266?

HTTP/1.1 200 OK 
Content-Type: text/html; charset=utf-8 
Connection: close 
Status: 200 OK 

Balance:50 
uint32_t len = wifi.recv(buffer, sizeof(buffer), 10); 
if (len > 0) { 
    Serial.print("Received:["); 
    for(uint32_t i = 0; i < len; i++) { 
    Serial.print((char)buffer[i]); 
    } 
    Serial.print("]\r\n"); 
} 
+2

La spécification HTTP indique que le séparateur entre les en-têtes et le corps est '\ r \ n \ r \ n', donc abandonner toutes les entrées jusqu'à et y compris les personnages et vous serez au début de le corps. – par

+0

@par pouvez-vous me donner un indice comment puis-je faire cela? – zxcetera

+0

Essayez de regarder la fonction de boucle dans [cet exemple] (https://github.com/imjosh/espLedDimmer/blob/master/arduino/espLedDimmer/espLedDimmer.ino) qui lit une page Web pour définir la luminosité d'une LED. – leetibbett

Répondre

1

D'abord je mets toute réponse dans la variable chaîne puis trouver l'index de mon déclenchement (« OK » Je peux aussi utiliser « \ r \ n \ r \ n », mais je ne sais pas pourquoi je suis en utilisant mon propre déclencheur lol) afin que je puisse filtrer tous ces en-têtes.

wifi.send((const uint8_t*)httpPost, strlen(httpPost)); 
int t = 0; 
char resp[] = {}; 
uint32_t len = wifi.recv(buffer, sizeof(buffer), 1024); 
if (len > 0) { 
    String resp; 
    for (uint32_t i = 0; i < len; i++) { 
    resp += String((char)buffer[i]); 
    } 
    Serial.println(resp); 

    int ind = resp.indexOf("OK",20); 
    String response; 
    for(int x = ind+3;x<=resp.length();x++){ 
    response += resp[x]; 
    } 
    Serial.println(response); 
}