- // -----------------------------------------------------------------------------
- // 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;
- }
-
- }
-
|