// -----------------------------------------------------------------------------
|
|
// Parse char string as URL
|
|
//
|
|
// Adapted from HTTPClient::beginInternal()
|
|
// https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp
|
|
//
|
|
// -----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
struct URL {
|
|
String value;
|
|
String protocol;
|
|
String host;
|
|
String path;
|
|
uint16_t port;
|
|
|
|
URL(const char* url) { init(url); }
|
|
URL(const String& url) { init(url); }
|
|
|
|
void init(String url);
|
|
};
|
|
|
|
void URL::init(String url) {
|
|
|
|
this->value = url;
|
|
|
|
// cut the protocol part
|
|
int index = url.indexOf("://");
|
|
if (index > 0) {
|
|
this->protocol = url.substring(0, index);
|
|
url.remove(0, (index + 3));
|
|
}
|
|
|
|
if (this->protocol == "http") {
|
|
this->port = 80;
|
|
} else if (this->protocol == "https") {
|
|
this->port = 443;
|
|
}
|
|
|
|
// cut the host part
|
|
String _host;
|
|
|
|
index = url.indexOf('/');
|
|
if (index >= 0) {
|
|
_host = url.substring(0, index);
|
|
} else {
|
|
_host = url;
|
|
}
|
|
|
|
// store the remaining part as path
|
|
if (index >= 0) {
|
|
url.remove(0, index);
|
|
this->path = url;
|
|
} else {
|
|
this->path = "/";
|
|
}
|
|
|
|
// separate host from port, when present
|
|
index = _host.indexOf(':');
|
|
if (index >= 0) {
|
|
this->port = _host.substring(index + 1).toInt();
|
|
this->host = _host.substring(0, index);
|
|
} else {
|
|
this->host = _host;
|
|
}
|
|
|
|
}
|