I'm trying to send a http post to my server from an esp8266-Wifi (I use the ESP8266 library)
I check all my http post format, and I guess is okay... but at the response, the monitor serial answer me like this:
Requesting POST: HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: 2017年6月10日 23:12:48 GMT
Connection: close
Content-Length: 339
<!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 - Invalid Header</h2>
<hr><p>HTTP Error 400. The request has an invalid header name.</p>
</BODY></HTML>
closing connection
and this is my code:
#include <ESP8266WiFi.h>
const char* ssid = "Putostodosmenosyo";
const char* password = "CetriX.2016%Gdl";
const char* host = "187.201.44.110";
const String Cadenadatos = "info=Micanton|2017年06月09日%2012:00|25" ;
//const String Tamano = String(Cadenadatos.length()) ;
const String postiu = "POST /wsCo2Keellingv1002/wsCo2Keelling.asmx/GuardaInfoArduino HTTP/1.1\r\nHost:187.201.44.110:80\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length:144\r\n\r\n?info="+String(Cadenadatos)+"\n" ;
const String postam = String(postiu);
void setup() {
Serial.begin(9600);
delay(100);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
delay(2000) ;
}
void loop() {
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host,httpPort)) {
Serial.println("Conexion fallida");
return;
}
//String data = "pst=temperature>" + String(random(0,100)) +"||humidity>" + String(random(0,100)) + "||data>text";
Serial.print("Requesting POST: ");
// Send request to the server:
//client.println("POST /wsCo2Keellingv1002/wsCo2Keelling.asmx/GuardaInfoArduino HTTP/1.1");
//client.println();
//client.println("co2kelling.hopto.org") ;
client.println("POST /wsCo2Keellingv1002/wsCo2Keelling.asmx/GuardaInfoArduino HTTP/1.1");
client.println("Host: co2kelling.hopto.org");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-length: ");
client.print(postiu.length());
client.println();
client.print(String(Cadenadatos));
while(client.connected())
{
while(client.available())
//String line = client.readStringUntil('\r') ;
Serial.write(client.read()) ;
}
/*delay(500); // Can be changed
if (client.connected()) {
client.stop(); // DISCONNECT FROM THE SERVER
}*/
Serial.println();
Serial.println("closing connection");
delay(5000);
}
NOTE: this is my fixed url http://187.201.44.110/wsCo2Keellingv1002/wsCo2Keelling.asmx/GuardaInfoArduino?info=Micanton|2017年06月09日%2012:00|25
EDIT
This is my Post format:
POST /wsCo2Keellingv1002/wsCo2Keelling.asmx/GuardaInfoArduino HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: length
info=string
1 Answer 1
You are lacking the required blank line between the headers and the content. Also your content length is wrong.
Change
client.print(postiu.length());
Into
client.println(Cadenadatos.length());
-
"closing connection Requesting POST:" This is now the response.Kangaroo– Kangaroo2017年06月10日 23:45:12 +00:00Commented Jun 10, 2017 at 23:45
-
I just spotted your content length uses the wrong value. See my updated answer.Majenko– Majenko2017年06月11日 09:08:12 +00:00Commented Jun 11, 2017 at 9:08
Explore related questions
See similar questions with these tags.