Pages: [1]   Go Down
Author Topic: Operador += con Strings y peticiones a servidores con Ethernet Shield  (Read 345 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Pages: [1]   Go Up
Jump to: