Hi all,
For a project I want to use SSE (Server Sided Events).
But the server requires me to use HTTPS. I have never done this before on an ESP32 (in PlatformIO).
I have everything working on my PC via cURL. Because with the following command I create an SSE connection and everything works:
curl --insecure -N -H "hue-application-key: abcMM1P83mBl10cgS3m4JCbWFbTE7hlRJ5M2c" -H "Accept: text/event-stream" https://192.168.1.2/eventstream/clip/v2
I had ChatGPT “translate” the above line to code for my ESP32, and with some input of my own, I then have this code:
void HueSSE(void * parameter){
String URL = "https://" + Hue_IP + "/eventstream/clip/v2";
SendUDP("prodedure.begin...");
WiFiClientSecure client;
client.setInsecure(); // Not using certificate check while testing
HTTPClient https;
https.useHTTP10(true);
SendUDP("https.begin...");
if (https.begin(client, URL)) { // HTTPS "https://httpbin.org/get"
SendUDP("Sending GET request...");
https.addHeader("Accept", "text/event-stream");
https.addHeader("hue-application-key", Hue_User_Name); // Add Authorization header
int httpCode=https.GET();
SendUDP(String(httpCode));
if(httpCode == HTTP_CODE_OK) {
int len = https.getSize();
uint8_t buff[128] = { 0 };
WiFiClient * stream = https.getStreamPtr();
while(https.connected() && (len > 0 || len == -1)) {
size_t size = stream->available();
if(size) {
int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));
char* pointer = (char*) buff;
SendUDP(pointer);
if(len > 0) {
len -= c;
}
}
delay(1);
}
}
SendUDP(https.getString());
https.end();
}else{
SendUDP("Could not connect to server");
}
}
The problem is, however, that it doesn’t work. I have also tried other online examples and “ChatGPT solutions”, but with none of them I get this working…
Who knows a solution?
Thanks in advance for thinking with me!
Regards,
vanlumig