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:
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:
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:
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.