La solicitud GET del cliente ESP-01 a pushbox no funciona - 400 solicitud incorrecta

0

Tengo mi ESP-01 conectado a un convertidor de USB a TTL y envío comandos AT a través de la Terminal (por bray).

Lo que quiero hacer es poner el esp-01 en modo cliente, luego conectarme a pushbox y finalmente enviar una solicitud GET con mi ID de dispositivo (API) a pushbox. Luego, se enviará una notificación a mi Android a través de mi cuenta de newtifry.

He probado los escenarios de pushbox desde mi PC y recibo notificaciones de newtifry en mi Android como se esperaba. También cuando escribo la URL con mi ID de dispositivo ( enlace ) en la barra de direcciones, funciona bien.

PERO cuando intento hacer lo mismo con esp-01, cuando envío la solicitud de obtención, recibo una solicitud incorrecta 400 (Su navegador envió una solicitud no válida). Cambié el formato de solicitud GET varias veces, pero sucede lo mismo.

Creo que la solicitud GET que envío está incompleta de alguna manera, pero no puedo averiguar qué falta.

Nota: el terminal no reconoce \ ry \ n como caracteres de un solo byte (por lo que \ r \ n = 4 bytes === > uno para cada carácter \ r \ n). Así que la cadena de URL que envío es el número de caracteres de URL + 4 bytes para cada \ r \ n en la cadena. Por ejemplo, si la cadena de URL tiene 88 caracteres (bytes) de largo con \ r \ n \ r \ n al final, agrego 8 caracteres.

A continuación, muestro la secuencia exacta de comandos que envío cada vez y también las diferentes versiones de la solicitud GET que he intentado enviar hasta el momento sin éxito.

AT + CWMODE = 1 AT + CWJAP="SSID", "pswd" AT + CIPSTART="TCP", "api.pushingbox.com", 80 AT + CIPMODE = 0 AT + CIPSEND = número de caracteres de la solicitud GET (bytes)

GET / pushingbox? devid = xxxxxxxxxxxxxxxx HTTP / 1.1 \ r \ nHost: api.pushingbox.com \ r \ n \ r \ n

GET / pushingbox? devid = xxxxxxxxxxxxxxxx HTTP / 1.1 \ r \ nHost: api.pushingbox.com \ r \ nConnection: close \ r \ n \ r \ n

GET / pushingbox? devid = xxxxxxxxxxxxxxxx HTTP / 1.1 \ r \ nHost: api.pushingbox.com \ r \ nUser-Agent: ESP8266 \ r \ n \ r \ n

GET / pushingbox? devid = xxxxxxxxxxxxxxxx HTTP / 1.1 \ r \ nHost: api.pushingbox.com \ r \ nUser-Agent: ESP8266 \ r \ nConnection: close \ r \ n \ r \ n

GET / pushingbox? devid = xxxxxxxxxxxxxxxx HTTP / 1.1 \ r \ nHost: api.pushingbox.com \ r \ nUser-Agent: ESP8266 \ r \ nContent-Type: text / html \ r \ nConnection: close \ r \ n \ r \ n

GET / pushingbox? devid = xxxxxxxxxxxxxxxx HTTP / 1.0 \ r \ n \ r \ n

    
pregunta Lefteris

1 respuesta

0
  

Nota: el terminal no reconoce \ ry \ n como caracteres de un solo byte (por lo que \ r \ n = 4 bytes === > uno para cada carácter \ r \ n). Así que la cadena de URL que envío es el número de caracteres de URL + 4 bytes para cada \ r \ n en la cadena. Por ejemplo, si la cadena de URL tiene 88 caracteres (bytes) de largo con \ r \ n \ r \ n al final, agrego 8 caracteres.

Has solucionado el problema aunque tu solución es incorrecta. Su solución envía el valor ASCII para cada carácter en \r\n , tomando las barras no como parte de una secuencia de escape sino como caracteres separados por derecho propio. Estás enviando 4 bytes: 92, 114, 92, 110 en lugar de 2 bytes: 13, 10 . No puedes escribir estas secuencias de escape en tu cuadro de texto (que toma todo literalmente), así que necesitarás que el programa de terminal lo haga por ti. No estoy familiarizado con la Terminal; Creo que tienes que configurar \r\n como macros de transmisión. Pero esto es realmente fácil de hacer con el monitor de serie Arduino. Simplemente establezca el final de línea en 'Ambos NL & CR 'y cada vez que presione Entrar para enviar una cadena, \r\n se agregará automáticamente. Así que solo necesitas escribir:

GET /pushingbox?devid=xxxxxxxxxxxxxxxx HTTP/1.1

y presiona Enter una vez. Las líneas subsiguientes se pueden enviar de una manera similar; simplemente presione Entrar tantas veces como necesite \r\n .

La mayoría de los programas de monitoreo en serie tienen esta función, solo tienes que averiguar cómo configurarlo.

    
respondido por el TisteAndii

Lea otras preguntas en las etiquetas