Paso 6: Implementación - enviar un HTTP solicitud con Edison
Medio ambiente del Ardurino de Edison ofrece todas las funciones que necesita para realizar una petición http. Sólo incluyen < Ethernet.h > y crear una instancia de EthernetClient en mi ejemplo declarada como "cliente". Echar un vistazo a los ejemplos de la entrada "Ethernet" en caso de que usted quiere aprender más acerca de la biblioteca.
Aquí sólo algunos fragmentos de código para mostrar la funcionalidad básica del código. Os adjunto el código fuente completo al final - esta es para ti entender - espero es uno mismo-explicando:
readstring Char [5000];
Cliente EthernetClient;
int i = 0;
mac de bytes [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
Server(195,30,121,20) dirección IP; El servidor es efa.mvv-muenchen.de
Ethernet.Begin(Mac);
Client.println(CMD); CMD es la solicitud que desea enviar como una cadena
{if(Client.Available())}
char c = client.read(); leer un char
ReadString [i ++] = c; poner a la matriz de char
}
Si tienes más preguntas, por favor visite: http://www.arduino.cc/en/reference/ethernet
La cadena "cmd" debe tener la misma estructura que la cadena que utilizamos en netcat antes.
CMD = GET /xhr_departures? locationServerActive = 1 & estado = 1 & type_d... HTTP/1.0 "
Asegúrese de manejar la hora y fecha correctas dentro de la cadena (en el formato correcto!). He añadido un ' HTTP / 1.0 "al final como se hizo en los ejemplos.
En primer lugar debe comprobar si obtienes los mismos resultados como con netcat imprimiendo lo caracteres en la consola serie. Si usted no, hiciste algo mal;). Busque errores ortográficos y asegúrese de enviar que una línea de alimentación '\n' en el final.
Suponga que está trabajando - ¡ Felicidades! Casi ha terminado! El resto de su trabajo es extraer la información que realmente necesita de la cadena recibida. Tienes que según los datos que reciba el servidor. Lo hice de una manera "rápida y sucia" y usted puede hacerlo mucho más elegante.
Yo elimine a todos los caracteres antes de que veo un principio del cuerpo. No tienes que hacerlo - pero se sentía incómoda mantener todos los datos inútiles;). He utilizado "si (strstr (readstring,"< tbody >")) {" para verificar.
-Busqué un patrón común extraer la información que necesito. Con "j" y "k" me marca el índice justo antes y después de lo caracteres que necesito. Utilice "indexOf" para encontrarlo. En mi caso el número de línea fue rodeado por "... para imprimir > "y"< \span >". Uso "substring" para almacenar la línea sí mismo número en una cadena separada. Repita para toda la información que necesita.
j = bodyString.indexOf ("\"printable\">", j) + strlen ("\"printable\">");
k = bodyString.indexOf ("< /span >", j);
contenido = bodyString.substring(j,k)