¿Cómo solicitar "GET" desde un sitio web ASP.NET utilizando ESP8266?

0
AT+CIPSTART="TCP","zgrdataserver.com.azhar.arvixe.com",80

OK, funciona.

AT+CIPSEND=92

La respuesta es ">". Funciona bien, pero

GET /androidserver.aspx?param=esp8266 Http/1.1\r\nHost: zgrdataserver.com.azhar.arvixe.com\r\n\r\n

No importa qué, este código siempre devuelve el error HTTP 400 bad request o el error Wrta syntax . Irónicamente, todos los ejemplos en Internet que encontré utilizan el ejemplo de la API de thingspeak.com. Sin embargo, quiero usar mi propio servidor para registrar datos. Gracias por cualquier ayuda, por adelantado.

Para aquellos que se preguntan http://zgrdataserver.com.azhar.arvixe.com/androidserver.aspx?param=asdf , la solicitud funciona perfectamente bien.

    
pregunta Zgrkpnr

2 respuestas

2

Tiene un error en su solicitud HTTP, la versión HTTP debería estar en mayúsculas (es decir, HTTP/1.1 ). Pruebe sus solicitudes en una computadora con telnet primero. Obtengo la siguiente salida:

$ telnet zgrdataserver.com.azhar.arvixe.com 80
Trying 23.91.112.247...
Connected to zgrdataserver.com.azhar.arvixe.com.
Escape character is '^]'.
GET /androidserver.aspx?param=esp8266 Http/1.1
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Sun, 10 May 2015 18:54:39 GMT
Connection: close
Content-Length: 311

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request</h2>
<hr><p>HTTP Error 400. The request is badly formed.</p>
</BODY></HTML>
Connection closed by foreign host.

Observe que el servidor responde inmediatamente después de enviar la primera línea. Con una solicitud correcta recibo:

$ telnet zgrdataserver.com.azhar.arvixe.com 80
Trying 23.91.112.247...
Connected to zgrdataserver.com.azhar.arvixe.com.
Escape character is '^]'.
GET /androidserver.aspx?param=esp8266 HTTP/1.1
Host: zgrdataserver.com.azhar.arvixe.com

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sun, 10 May 2015 18:55:53 GMT
Content-Length: 846

<br>
78.167.30.214<br>
asdf<br>
[...]

Esto es al menos parte de tu problema.

Como sugerencia, use HTTP/1.0 en lugar de HTTP/1.1 . Esto evita que el servidor envíe datos fragmentados y también cerrará automáticamente la conexión (sin un encabezado Connection en la solicitud).

    
respondido por el svens
2

El problema aquí tiene que ver con los finales de línea y cómo los está enviando.

El ESP8266 es muy quisquilloso con la forma en que envías los datos, y solo el envío de una cadena que incluya cosas como \r no funcionará.

Logré que funcionara utilizando un sistema Linux y primero manualmente (usando minicom ) enviando los comandos para abrir el puerto y enviar los datos. Luego canalicé un archivo que contenía la solicitud con los caracteres de final de línea correctamente formateados en el dispositivo en serie (el envío de un archivo ASCII probablemente también habría funcionado).

Realmente se supone que el envío de los datos se realiza de forma totalmente programada utilizando un esquema de "espera - envío" (usted espera algo, luego le envía una respuesta).

Entonces el envío sería un caso de:

Expect           Send
======           ====
<nothing>        AT+CIPSTART="TCP","zgrdataserver.com.azhar.arvixe.com",80
OK               AT+CIPSEND=92
>                <your data, including the actual characters 13 and 10>
SEND OK          <nothing>

Puede que le resulte un poco extraño hacerlo de esa manera, mejor que piense hacer "enviar - esperar" en lugar de "esperar - enviar". Puede que tengas razón, pero esa es la forma tradicional en que los sistemas de control de módem se han utilizado desde los días de UUCP.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas