Hallo,
ich versuche Daten an einen IoT Service zu senden und dazu muss ich einen OAuth Token auslesen.
Anscheinend ist die Response für den Token zu lang. Auf jeden Fall geht der JSON Parser immer mit einem Fehler auf die Bretter.
Mit writeToStream(&Serial) sehe ich allerdings, dass die Antwort korrekt ist.
Leider habe ich keine Ahnung, wie ich an den Token kommen kann.
Hat hier jemand eine Idee?
Hier der Code:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
const char* ssid = "<-----wlan ssid----->";
const char* password = "<-----wlan passwort----->";
const char* iot_url = "https://<-----iot url----->/oauth/token";
const int iot_port = 443;
HTTPClient http;
WiFiClientSecure httpsClient;
WiFiClient espClient;
void getToken() {
httpsClient.setInsecure();
httpsClient.connect(iot_url, iot_port);
http.useHTTP10(true);
http.begin(httpsClient, iot_url);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
const char* token_content = \
"grant_type=client_credentials" \
"&response_type=token" \
"&client_id=<-----client id----->" \
"&client_secret=<-----client secret----->";
int httpCode = http.POST(token_content); //Send the request
//TEST 1 - OK - Shows complete JSON Response!
http.writeToStream(&Serial);
//TEST 2 - 200 BUT payload is not complete! Same with getStream instead of getString
String payload = http.getString();
Serial.println(httpCode);
Serial.println(payload);
//TEST 3 - Always deserialization ERROR :-(
DeserializationError deserializeError;
DynamicJsonDocument jsondoc(2048);
deserializeError = deserializeJson(jsondoc, http.getStream());
if ( ! deserializeError ) {
const char* token = jsondoc["access_token"];
}
else {
Serial.println("ERROR Deserialize ERROR");
}
http.end();
}
void setup() {
Serial.begin(115200);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
getToken();
}
void loop() {
}
Danke & Grüße,
Roger