GPRS HTTP 400 Solicitud incorrecta

0

Estoy enfrentando algún problema con el Proyecto GPRS. Estoy enviando la solicitud al servidor a través de GPRS y estoy recibiendo respuesta del servidor. He utilizado el microcontrolador AVR ATmega32 y el módulo SIM900 GSM / GPRS de simcom. Puedo enviar el encabezado de solicitud HTTP con éxito al servidor, pero siempre obtengo una respuesta de solicitud incorrecta. He escrito el programa en AVR Studio 6.2. Aquí he adjuntado la Respuesta del Servidor recibida en GPRS.

  AT
OK
AT+CSMINS?
+CSMINS: 0,1

OK
AT+CREG?
+CREG: 0,1

OK
AT+CGATT?
+CGATT: 1

OK
AT+CIPSHUT
SHUT OK
AT+CIPSTATUS
OK

STATE:IP INITIAL
AT+CIPMUX=0
OK
AT+CSTT="idea gprs"
OK
AT+CIICR
OK
AT+CIFSR
10.112.37.103
AT+CIPSTART= "TCP","198.136.54.34","80"
OK

CONNECT OK
AT+CIPSEND
> GET /httptest.php?data1=value1 HTTP/1.1
 Host: http://exqure.com


SEND OK
HTTP/1.1 400 Bad Request
Date: Thu, 18 Jun 2015 12:19:34 GMT
Server: Apache
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
                                                  <html><head>
                                                              <title>400 Bad Request</title>
                 </head><body>
                              <h1>Bad Request</h1>
                                                  <p>Your browser sent a request that this server could not understand.<br />
                                                  </p>
                                                      </body></html>

Quiero entender que ¿a dónde me voy mal? ¿Cuál es el formato correcto para la solicitud de encabezado HTTP?

Aquí está mi código:

//////////////////////////////////////////////////////////////////////////
//          SEND DATA
//////////////////////////////////////////////////////////////////////////
    LCD_ClearScreen();
    LCD_goto_XY(1,1);
    LCD_Print("Sending DATA");
    _delay_ms(1000);
    LCD_ClearScreen();
    r=SIM300SendDATA(0,"/httptest.php?data1=value1","http://exqure.com");
    if (r==SIM300_FAIL)
    {


    }

int8_t  SIM300SendDATA(uint8_t *Method,char *PATH,char *HOST)
{
    UFlushBuffer();
    //UWriteString(num);
    char cmd[25]="AT+CIPSEND",DataToSend[255];
    //char GET2[255]="";
    //char CRLF[4]="\r\n\r\n";
    //Send Command
    SIM300Cmd(cmd);

    _delay_ms(200);
    uint8_t len = SIM300GPRSWaitForResponse(1000);
    if(len)
    {
        if (!Method)
        {
            sprintf(DataToSend, "GET %s HTTP/1.1\r\n Host: %s\r\n\r\n", PATH, HOST);
        }
        else
        {
            sprintf(DataToSend, "POST %s HTTP/1.1\r\n Host: %s\r\n", PATH,HOST);
        }
    }
    else
    {
        return SIM300_TIMEOUT;
    }


    UWriteString(DataToSend);
    //UWriteString(GET2);
    //UWriteString(CRLF);
    UWriteData(0x1A);

    len=SIM300WaitForResponse(1000);

    if(len==0)
    return SIM300_TIMEOUT;

    sim300_buffer[len-1]='
  AT
OK
AT+CSMINS?
+CSMINS: 0,1

OK
AT+CREG?
+CREG: 0,1

OK
AT+CGATT?
+CGATT: 1

OK
AT+CIPSHUT
SHUT OK
AT+CIPSTATUS
OK

STATE:IP INITIAL
AT+CIPMUX=0
OK
AT+CSTT="idea gprs"
OK
AT+CIICR
OK
AT+CIFSR
10.112.37.103
AT+CIPSTART= "TCP","198.136.54.34","80"
OK

CONNECT OK
AT+CIPSEND
> GET /httptest.php?data1=value1 HTTP/1.1
 Host: http://exqure.com


SEND OK
HTTP/1.1 400 Bad Request
Date: Thu, 18 Jun 2015 12:19:34 GMT
Server: Apache
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
                                                  <html><head>
                                                              <title>400 Bad Request</title>
                 </head><body>
                              <h1>Bad Request</h1>
                                                  <p>Your browser sent a request that this server could not understand.<br />
                                                  </p>
                                                      </body></html>
'; if(strncasecmp(sim300_buffer+2,"CMGS:",5)==0) { UFlushBuffer(); return SIM300_OK; } else { UFlushBuffer(); return SIM300_FAIL; } }
    
pregunta isoln

2 respuestas

3

Resolví el problema. :) El problema fue con el "espacio" adicional en el encabezado.

sprintf(DataToSend, "GET %s HTTP/1.1\r\n Host: %s\r\n\r\n", PATH, HOST);

He eliminado ese espacio:

sprintf(DataToSend, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", PATH, HOST);

y luego el problema se resuelve. Aquí está la respuesta del servidor:

HTTP/1.1 200 OK
Date: Fri, 19 Jun 2015 03:38:14 GMT
Server: Apache
X-Powered-By: PHP/5.4.34
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Last-Modified: Fri, 19 Jun 2015 03:38:14 GMT
Vary: Accept-Encoding,User-Agent
Content-Length: 87
Content-Type: text/plain

This is REQUEST Data
data1:value1
This is GET Data
data1:value1
This is POS
           HTTP/1.1 200 OK
Date: Fri, 19 Jun 2015 03:38:14 GMT
Server: Apache
X-Powered-By: PHP/5.4.34
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Last-Modified: Fri, 19 Jun 2015 03:38:14 GMT
Vary: Accept-Encoding,User-Agent
Content-Length: 87
Content-Type: text/plain

This is REQUEST Data
data1:value1
This is GET Data
data1:value1
This is POS
           T Data

Gracias chicos.

    
respondido por el isoln
2

Mi mejor estimación: el valor del encabezado Host debería ser un nombre de host, no una URL. En su ejemplo, probablemente debería ser exqure.com en lugar de http://exqure.com .

En términos de código, la línea infractora sería:

SIM300SendDATA(0,"/httptest.php?data1=value1","http://exqure.com")

... que probablemente debería cambiarse en:

SIM300SendDATA(0,"/httptest.php?data1=value1","exqure.com")
    
respondido por el Mels

Lea otras preguntas en las etiquetas