// ----------------------------------------------------------------------------- // Parse char string as URL // // Adapted from HTTPClient::beginInternal() // https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp // // ----------------------------------------------------------------------------- #pragma once class URL { public: URL(); URL(const String&); String protocol; String host; String path; uint16_t port; private: void _parse(String); }; URL::URL() : protocol(), host(), path(), port(0) {} URL::URL(const String& string) { _parse(string); } void URL::_parse(String buffer) { // cut the protocol part int index = buffer.indexOf("://"); if (index > 0) { this->protocol = buffer.substring(0, index); buffer.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 = buffer.indexOf('/'); if (index >= 0) { _host = buffer.substring(0, index); } else { _host = buffer; } // store the remaining part as path if (index >= 0) { buffer.remove(0, index); this->path = buffer; } 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; } }