Go Down

Topic: Operador += con Strings y peticiones a servidores con Ethernet Shield (Read 376 times) previous topic - next topic

felmoltor

Hola,

Estoy teniendo unos problemillas a la hora de hacer peticiones a un servidor compartido con el Ethernet Shield.
Mi servidor se dedica a devolver mensajes que tiene que procesar el Arduino con el buzzer.

Al ser un servidor compartido, no es suficiente con darle la IP al cliente y la query que tiene que hacer, sino que también tengo que pasarle la cabecera "Host" para indicar al servidor a qué virtual host dirigirse. Es decir, las cabeceras mínimas que tengo que enviar son como las siguientes:

Code: [Select]

GET /getlastmesage/ HTTP/1.1
Host: miservidorcompartido.com
User-agent: Arduino-1.0


A la hora de hacer la petición al servidor utilizo este código:

Code: [Select]


const char * serverName    = "miservidorcompartido.com";
const char * uagent        = "Arduino-1.0";

...

String fetchLastMesageFrom(char * path){
  String str_response = "";
  String message_msg = "";
  String petition = "";
 
  Serial.print("path: ");
  Serial.println(path);
  Serial.print("serverName: ");
  Serial.println(serverName);
  Serial.print("uagent: ");
  Serial.println(uagent);
 
  petition += "GET ";
  Serial.println("Petition 1: ");
  Serial.print(petition);
  petition += path;
  Serial.println("Petition 2: ");
  Serial.print(petition);
  petition += " HTTP/1.1";
  Serial.println("Petition 3: ");
  Serial.print(petition);
  petition += "\n";
  Serial.println("Petition 4: ");
  Serial.print(petition);
  petition += "Host: ";
  Serial.println("Petition 5: ");
  Serial.print(petition);
  petition += serverName;
  Serial.println("Petition 6: ");
  Serial.print(petition);
  petition += "\n";
  Serial.println("Petition 7: ");
  Serial.print(petition);
  petition += "User-agent: ";
  Serial.println("Petition 8: ");
  Serial.print(petition);
  petition += uagent;
  Serial.println("Petition 9: ");
  Serial.print(petition);
  petition += "\n";
  petition += "\n";
 
  Serial.println("=================================");
  Serial.println("Petition es: ");
  Serial.print(petition);
  Serial.println("=================================");
  delay(1000);
  Serial.flush();
 
  if (client.connect(server, gwPort)) { 
    // Make a HTTP request:
    client.print(petition);
    // Esperar a la respuesta del servidor
    delay(1000); // Esperamos respuesta durante 0.5 segundos
    str_response = getServerResponse();
    Serial.println("[INFO] Respuesta recibida del servidor: ");
    Serial.println(str_response);
    Serial.println("[INFO] Buscando el mensaje que nos interesa: ");
    message_msg = SearchMessage(str_response);
    Serial.println(message_msg);
    client.flush();
  }
  else {
    Serial.print("[Error] Connection failed getting the Mesage from ");
    Serial.println(path);
  }
  return message_msg;
}
...


Como veis, hay una parte en la que voy añadiendo al String "petition" las variables a la cabeceras que quiero enviar en la petición.
El problema está en que la petición no llega ha hacerse corectamente, en el puerto serie me aparece la siguiente salida:

Quote

path: /getlastmesage/
serverName: miservidorcompartido.com
uagent: Arduino-1.0
Petition 1:
Petition 2:
Petition 3:
Petition 4:
Petition 5:
Petition 6:
Petition 7:
Petition 8:
Petition 9:
=================================
Petition es:
=================================


Parece ser que no se está añadiendo correctamente al string las cadenas de caracteres que forman la petición.
¿ Sabéis qué puede estar ocurriendo? ¿Se me está pasando algo?

Muchas gracias.

Go Up