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