Skip to content

ESP32 HTTPClient does not like to talk to ESP8266WebServer #3941

@awyork

Description

@awyork

Hardware:

Board: Custom Board using ESP32-WROOM-32U (16MB)
Core Installation version: ESP 1.0.4
IDE name: Arduino and Visual Micro
Flash Frequency: 80
PSRAM enabled: no
Upload Speed: 900Kbit (full speed serial) or OTA
Computer OS: Win 10

Description:

I'm doing a HTTP Get to an ESP8266 IOT Device. I saw a similar issue where switching to a "real" server also worked for the person, but I cannot find it now. The "bad" web server causes the ESP32 to reset. (Trace below) I don't have this problem with Apache.

This also seems very related. The ESP8266WebServer does not want to keep-alive.
#3659 (comment)

I can make this server available for troubleshooting.

Sketch: (leave the backquotes for code formatting

Example sketch for BasicHTTPClient.ino

/**
 * BasicHTTPClient.ino
 *
 *  Created on: 24.05.2015
 *
 */

#include <Arduino.h>

#include <WiFi.h>
#include <WiFiMulti.h>

#include <HTTPClient.h>

#define USE_SERIAL Serial

WiFiMulti wifiMulti;

/*
const char* ca = \
"-----BEGIN CERTIFICATE-----\n" \
"MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n" \
"MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n" \
"DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n" \
"SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n" \
"GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" \
"AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n" \
"q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n" \
"SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n" \
"Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n" \
"a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n" \
"/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n" \
"AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n" \
"CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n" \
"bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n" \
"c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n" \
"VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n" \
"ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n" \
"MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n" \
"Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n" \
"AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n" \
"uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n" \
"wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n" \
"X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n" \
"PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n" \
"KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n" \
"-----END CERTIFICATE-----\n";
*/

void setup() {

	USE_SERIAL.begin(115200);

	USE_SERIAL.println();
	USE_SERIAL.println();
	USE_SERIAL.println();

	for (uint8_t t = 4; t > 0; t--) {
		USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
		USE_SERIAL.flush();
		delay(1000);
	}

	wifiMulti.addAP("DAWGS-N", "********");

}


void loop() {
	static uint32_t i = 0;
	// wait for WiFi connection
	if ((wifiMulti.run() == WL_CONNECTED)) {

		HTTPClient http;

		USE_SERIAL.print("[HTTP] begin...\n");
		// configure traged server and url
		//http.begin("https://www.howsmyssl.com/a/check", ca); //HTTPS
		//http.begin("http://yorknation.com/data.json"); //HTTP
		http.begin("http://pumpsaver/data"); //HTTP

		USE_SERIAL.print("[HTTP] GET...\n");
		// start connection and send HTTP header
		int httpCode = http.GET();

		// httpCode will be negative on error
		if (httpCode > 0) {
			// HTTP header has been send and Server response header has been handled
			USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);

			// file found at server
			if (httpCode == HTTP_CODE_OK) {
				String payload = http.getString();
				USE_SERIAL.println(payload);
			}
		}
		else {
			USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
		}

		http.end();
		USE_SERIAL.println(i++);
	}

	delay(500);
}

Debug Messages:

I think this is the problem. HTTP Client does not like it when the web server does a RST instead of a ACK to the FIN message. (Is ESP8266Web Server also broken? Perhaps. However, the RST should not cause the ESP32 to not reset.) This problem goes away when I change the webserver to Apache. It also does not happen 100% of the time, but it will happen well over 50%

image

Trace:

[HTTP] begin...
[V][HTTPClient.cpp:235] beginInternal(): url: http://pumpsaver/data
[D][HTTPClient.cpp:276] beginInternal(): host: pumpsaver port: 80 url: /data
[D][HTTPClient.cpp:1025] connect():  connected to pumpsaver:80
[V][HTTPClient.cpp:1123] handleHeaderResponse(): RX: 'HTTP/1.1 200 OK'
[V][HTTPClient.cpp:1123] handleHeaderResponse(): RX: 'Content-Type: text/json'
[V][HTTPClient.cpp:1123] handleHeaderResponse(): RX: 'Content-Length: 171'
[V][HTTPClient.cpp:1123] handleHeaderResponse(): RX: 'Connection: close'
[V][HTTPClient.cpp:1123] handleHeaderResponse(): RX: ''
[D][HTTPClient.cpp:1158] handleHeaderResponse(): code: 200
[D][HTTPClient.cpp:1161] handleHeaderResponse(): size: 171
[D][HTTPClient.cpp:1295] writeToStreamDataBlock(): connection closed or file end (written: 171).
[D][HTTPClient.cpp:370] disconnect(): tcp stop

{"running":false,"pressure":0,"guageconnected":true,"raw":103,"avgTemp":24.21,"index":3,"junction":32.8125,"fault":false,"noprobe":false,"shortgnd":false,"shortvcc":false}
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x4015e1fc  PS      : 0x00060430  A0      : 0x800d408b  A1      : 0x3ffb1e90  
A2      : 0x3ffb1f10  A3      : 0x00000000  A4      : 0x000000ab  A5      : 0x3f402750  
A6      : 0x400d20e8  A7      : 0x00000000  A8      : 0x00000000  A9      : 0x3ffb1e70  
A10     : 0x3ffba7b8  A11     : 0x00000000  A12     : 0x00000002  A13     : 0x0000ff00  
A14     : 0x00ff0000  A15     : 0xff000000  SAR     : 0x00000004  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000010  LBEG    : 0x4000c46c  LEND    : 0x4000c477  LCOUNT  : 0x00000000  

Backtrace: 0x4015e1fc:0x3ffb1e90 0x400d4088:0x3ffb1eb0 0x400d4159:0x3ffb1ed0 0x400d1b73:0x3ffb1ef0 0x400d7029:0x3ffb1fb0 0x40088b9d:0x3ffb1fd0

Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8

Metadata

Metadata

Assignees

No one assigned

    Labels

    Status: StaleIssue is stale stage (outdated/stuck)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions