I want to get some JSON data from a HTTPS secured Webserver using a ESP8266. For some reason I'm getting an empty response, I believe there's an error parsing the GET request. In Chrome I get the JSON response without problems. GET Request: httpsClient.print(String("GET ") + path + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); Host and Path: const char *host = "www.adler-mannheim.de"; const char *path = "/jsonapi/game/current"; **UPDATE:** I tried fetching some JSON from another Server and it worked finde, so i can rule out my code. Fiddling around with the host and path I observe this: - Hostname without "www" results in a 301 - Hostname with "https://www" results in no HTTPS connection at all So it seems that a "www" is required although it unfortunately leads into a empty response. The output is as follows: headers received reply was: ========== ========== closing connection In the first case, without using "www" in ahead of host there's some 301 HTML in between the two lines of "=". Whole function: void connect() { WiFiClientSecure httpsClient; //Declare object of class WiFiClient Serial.println(host); httpsClient.setInsecure(); Serial.print("HTTPS Connecting"); int r=0; //retry counter while((!httpsClient.connect(host, httpsPort)) && (r < 30)){ delay(100); Serial.print("."); r++; } if(r==30) { Serial.println("Connection failed"); } else { Serial.println("Connected to web"); } String getData, Link; //GET Data Serial.print("requesting URL: "); Serial.println(host+Link); httpsClient.print(String("GET ") + path + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); Serial.println("request sent: "); Serial.println(String("GET ") + path + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); while (httpsClient.connected()) { String line = httpsClient.readStringUntil('\n'); if (line == "\r") { Serial.println("headers received"); break; } } Serial.println("reply was:"); Serial.println("=========="); String line; while(httpsClient.available()){ line = httpsClient.readStringUntil('\n'); //Read Line by Line Serial.println(line); //Print response } Serial.println("=========="); Serial.println("closing connection"); delay(2000); //GET Data at every 2 seconds } **UPDATE 2:** I tried the following code from the ESP8266HTTPClient Library examples: void connect2() { WiFiClientSecure client; //client.setFingerprint(fingerprint); client.setInsecure(); HTTPClient https; Serial.print("[HTTPS] begin...\n"); if (https.begin(client, "https://github.com/esp8266/Arduino/issues/3417")) { // HTTPS Serial.print("[HTTPS] GET...\n"); // start connection and send HTTP header int httpCode = https.GET(); // httpCode will be negative on error if (httpCode > 0) { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTPS] GET... code: %d\n", httpCode); // file found at server if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { String payload = https.getString(); Serial.println(payload); } } else { Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str()); } https.end(); } else { Serial.printf("[HTTPS] Unable to connect\n"); } Serial.println("Wait 10s before next round..."); delay(10000); } This one gives me a 200 but no payload. Other sites work **UPDATE 3:** I had a look on the headers. https.headers() This gives me 0 headers on every page, even when there's a payload. I also had a closer look at the payload that returns from my desired api and its filled with NULL. In a weird way this is only the case with my desired page and only my desired subpages. Requesting something more at top level e.g "https://www.adler-mannheim.de/jsonapi" which is basically a SilverStripe Welcome page, I get a fully fetched beautiful HTML payload. I got literally no Idea why. Do I have to set a specific User Agent or something so that the Server responds?