Ubidots Community

[SOLVED] Puedo enviar no mas de 2 variables en una solicitud POST

Hola Ubidots
He estado buscando alguna solucion en el foro por este tema y no puedo dar con la misma

El problema es que cuando envio 2 variables de la forma:

sprintf(buff, “POST /api/v1.6/collections/values HTTP/1.1\r\nContent-Type:application/json\r\nX-Auth-Token:%s\r\nHost:things.ubidots.com\r\nConnection: close\r\nContent-Length:%d\r\n\r\n[{“variable”:”%s",“value”:%s},{“variable”:"%s",“value”:%s}]\r\n\r\n",token,sizet,idVariable3,tension,idVariable2,corr);

lo hace correctamente

y cuando intento enviar una mas no lo hace. he intentado asignar un buff de mas espacio y ni asi lo puede recibir. No parece ser un problema de ubidots ya que al enviar las 3 variables por un terminal de cliente TCP/IP como Hercules la solicitud es atendida correctamente.

estoy usando un modulo wifi MRF24WB0MA.

Hola, mirando la pieza de código que compartiste, deberías asegurarte que la variable sizet, que es la que almacena el tamaño de tu payload como valor para Content-Length sea calculada correctamente, en tu código el payload se construye solo al final y probablemente tengas un error en ese cálculo.

Te recomiendo ver ejemplos en nuestra documentación de hardware para que te hagas una idea sobre cómo construir correctamente tus peticiones HTTP.

Saludos.

Jose gracias por la respuesta. lo pude solucionar por el momento partiendo el payload y enviandolo en 2 solicitudes ya que al parece el problema esta en la variable buff es demasiado larga para transmitirla de una sola vez.

                    char buff[400];
                    uitoa(ADC1BUF0,temp); //temperatura
                    size=strlen(temp)+10;
                    uitoa(ADC1BUF7,corr);  //corriente
                    size2=strlen(corr);
                    uitoa(ADC1BUF6,tension); //tension
                    size3=strlen(tension);
                    sizeid1=strlen(idVariable);
                    sizeid2=strlen(idVariable2);
                    sizeid3=strlen(idVariable3);
                    sizet=size3+size2+sizeid3+sizeid2+51;
                    //sizet=size+size2+size3+sizeid1+sizeid2+sizeid3+76;
                    //uitoa(sizet,sizen);
		
                     // Place the application protocol data into the transmit buffer.  For this example, we are 
                    connected to an HTTP server, so we'll send an HTTP POST request.
                    if(flag==1)
                    {
                    flag=0;
                    sprintf(buff, "POST /api/v1.6/collections/values HTTP/1.1\r\nContent-Type:application/json\r\nX- 
                    Auth-Token:%s\r\nHost:things.ubidots.com\r\nContent- 
                    Length:%d\r\n\r\n[{\"variable\":\"%s\",\"value\":%s}, 
                    {\"variable\":\"%s\",\"value\":%s}]\r\n\r\n",token,sizet,idVariable3,tension,idVariable2,corr);
                    
                    TCPPutArray(MySocket,buff,strlen(buff));
                    TCPFlush(MySocket);
                    }
                    else if(flag!=1)
                    {
                    flag=1;
                    sprintf(buff, "POST /api/v1.6/variables/%s/values HTTP/1.1\r\nContent-Type: application/json\r\nX-Auth-Token:%s\r\nHost:things.ubidots.com\r\nConnection: close\r\nContent-Length:%d\r\n\r\n{\"value\":%s}\r\n\r\n",idVariable,token,size,temp);
                    }
                    TCPPutArray(MySocket,buff,strlen(buff));
                    TCPFlush(MySocket);
                    GenericTCPExampleState++;
                    break;