Go Down

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

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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy