mirror of
				https://github.com/esp8266/Arduino.git
				synced 2025-11-03 14:33:37 +03:00 
			
		
		
		
	httpclient: remove deprecated API (#7617)
This commit is contained in:
		@@ -28,62 +28,12 @@
 | 
				
			|||||||
#include <StreamString.h>
 | 
					#include <StreamString.h>
 | 
				
			||||||
#include <base64.h>
 | 
					#include <base64.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TransportTraits
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    virtual ~TransportTraits()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    virtual std::unique_ptr<WiFiClient> create()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return std::unique_ptr<WiFiClient>(new WiFiClient());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    virtual bool verify(WiFiClient& client, const char* host)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        (void)client;
 | 
					 | 
				
			||||||
        (void)host;
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class BearSSLTraits : public TransportTraits
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    BearSSLTraits(const uint8_t fingerprint[20])
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        memcpy(_fingerprint, fingerprint, sizeof(_fingerprint));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    std::unique_ptr<WiFiClient> create() override
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        BearSSL::WiFiClientSecure *client = new BearSSL::WiFiClientSecure();
 | 
					 | 
				
			||||||
        client->setFingerprint(_fingerprint);
 | 
					 | 
				
			||||||
        return std::unique_ptr<WiFiClient>(client);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bool verify(WiFiClient& client, const char* host) override
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        // No-op.  BearSSL will not connect if the fingerprint doesn't match.
 | 
					 | 
				
			||||||
        // So if you get to here you've already connected and it matched
 | 
					 | 
				
			||||||
        (void) client;
 | 
					 | 
				
			||||||
        (void) host;
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
protected:
 | 
					 | 
				
			||||||
    uint8_t _fingerprint[20];
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * constructor
 | 
					 * constructor
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
HTTPClient::HTTPClient()
 | 
					HTTPClient::HTTPClient()
 | 
				
			||||||
    : _client(nullptr), _userAgent(F("ESP8266HTTPClient"))
 | 
					    : _client(nullptr), _userAgent(F("ESP8266HTTPClient"))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    _tcpDeprecated.reset(nullptr);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -117,12 +67,6 @@ void HTTPClient::clear()
 | 
				
			|||||||
 * @return success bool
 | 
					 * @return success bool
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
bool HTTPClient::begin(WiFiClient &client, const String& url) {
 | 
					bool HTTPClient::begin(WiFiClient &client, const String& url) {
 | 
				
			||||||
    if(_tcpDeprecated) {
 | 
					 | 
				
			||||||
        DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n");
 | 
					 | 
				
			||||||
        _canReuse = false;
 | 
					 | 
				
			||||||
        end();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    _client = &client;
 | 
					    _client = &client;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // check for : (http: or https:)
 | 
					    // check for : (http: or https:)
 | 
				
			||||||
@@ -154,12 +98,6 @@ bool HTTPClient::begin(WiFiClient &client, const String& url) {
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
bool HTTPClient::begin(WiFiClient &client, const String& host, uint16_t port, const String& uri, bool https)
 | 
					bool HTTPClient::begin(WiFiClient &client, const String& host, uint16_t port, const String& uri, bool https)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if(_tcpDeprecated) {
 | 
					 | 
				
			||||||
        DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n");
 | 
					 | 
				
			||||||
        _canReuse = false;
 | 
					 | 
				
			||||||
        end();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    _client = &client;
 | 
					    _client = &client;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     clear();
 | 
					     clear();
 | 
				
			||||||
@@ -171,52 +109,6 @@ bool HTTPClient::begin(WiFiClient &client, const String& host, uint16_t port, co
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool HTTPClient::begin(String url, const uint8_t httpsFingerprint[20])
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(_client && !_tcpDeprecated) {
 | 
					 | 
				
			||||||
        DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n");
 | 
					 | 
				
			||||||
        _canReuse = false;
 | 
					 | 
				
			||||||
        end();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!beginInternal(url, "https")) {
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    _transportTraits = TransportTraitsPtr(new (std::nothrow) BearSSLTraits(httpsFingerprint));
 | 
					 | 
				
			||||||
    if(!_transportTraits) {
 | 
					 | 
				
			||||||
        DEBUG_HTTPCLIENT("[HTTP-Client][begin] could not create transport traits\n");
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    DEBUG_HTTPCLIENT("[HTTP-Client][begin] BearSSL-httpsFingerprint:");
 | 
					 | 
				
			||||||
    for (size_t i=0; i < 20; i++) {
 | 
					 | 
				
			||||||
        DEBUG_HTTPCLIENT(" %02x", httpsFingerprint[i]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    DEBUG_HTTPCLIENT("\n");
 | 
					 | 
				
			||||||
    return true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * parsing the url for all needed parameters
 | 
					 | 
				
			||||||
 * @param url String
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
bool HTTPClient::begin(String url)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(_client && !_tcpDeprecated) {
 | 
					 | 
				
			||||||
        DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n");
 | 
					 | 
				
			||||||
        _canReuse = false;
 | 
					 | 
				
			||||||
        end();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!beginInternal(url, "http")) {
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    _transportTraits = TransportTraitsPtr(new TransportTraits());
 | 
					 | 
				
			||||||
    return true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool HTTPClient::beginInternal(const String& __url, const char* expectedProtocol)
 | 
					bool HTTPClient::beginInternal(const String& __url, const char* expectedProtocol)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    String url(__url);
 | 
					    String url(__url);
 | 
				
			||||||
@@ -278,47 +170,6 @@ bool HTTPClient::beginInternal(const String& __url, const char* expectedProtocol
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool HTTPClient::begin(String host, uint16_t port, String uri)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(_client && !_tcpDeprecated) {
 | 
					 | 
				
			||||||
        DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n");
 | 
					 | 
				
			||||||
        _canReuse = false;
 | 
					 | 
				
			||||||
        end();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    clear();
 | 
					 | 
				
			||||||
    _host = host;
 | 
					 | 
				
			||||||
    _port = port;
 | 
					 | 
				
			||||||
    _uri = uri;
 | 
					 | 
				
			||||||
    _transportTraits = TransportTraitsPtr(new TransportTraits());
 | 
					 | 
				
			||||||
    DEBUG_HTTPCLIENT("[HTTP-Client][begin] host: %s port: %d uri: %s\n", host.c_str(), port, uri.c_str());
 | 
					 | 
				
			||||||
    return true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool HTTPClient::begin(String host, uint16_t port, String uri, const uint8_t httpsFingerprint[20])
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(_client && !_tcpDeprecated) {
 | 
					 | 
				
			||||||
        DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n");
 | 
					 | 
				
			||||||
        _canReuse = false;
 | 
					 | 
				
			||||||
        end();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    clear();
 | 
					 | 
				
			||||||
    _host = host;
 | 
					 | 
				
			||||||
    _port = port;
 | 
					 | 
				
			||||||
    _uri = uri;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    _transportTraits = TransportTraitsPtr(new BearSSLTraits(httpsFingerprint));
 | 
					 | 
				
			||||||
    DEBUG_HTTPCLIENT("[HTTP-Client][begin] host: %s port: %d url: %s BearSSL-httpsFingerprint:", host.c_str(), port, uri.c_str());
 | 
					 | 
				
			||||||
    for (size_t i=0; i < 20; i++) {
 | 
					 | 
				
			||||||
        DEBUG_HTTPCLIENT(" %02x", httpsFingerprint[i]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    DEBUG_HTTPCLIENT("\n");
 | 
					 | 
				
			||||||
    return true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * end
 | 
					 * end
 | 
				
			||||||
 * called after the payload is handled
 | 
					 * called after the payload is handled
 | 
				
			||||||
@@ -353,10 +204,6 @@ void HTTPClient::disconnect(bool preserveClient)
 | 
				
			|||||||
                    _client = nullptr;
 | 
					                    _client = nullptr;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if(_tcpDeprecated) {
 | 
					 | 
				
			||||||
                _transportTraits.reset(nullptr);
 | 
					 | 
				
			||||||
                _tcpDeprecated.reset(nullptr);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        if (!preserveClient && _client) { // Also destroy _client if not connected()
 | 
					        if (!preserveClient && _client) { // Also destroy _client if not connected()
 | 
				
			||||||
@@ -460,15 +307,6 @@ bool HTTPClient::setURL(const String& url)
 | 
				
			|||||||
    return beginInternal(url, nullptr);
 | 
					    return beginInternal(url, nullptr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * set true to follow redirects.
 | 
					 | 
				
			||||||
 * @param follow
 | 
					 | 
				
			||||||
 * @deprecated
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
void HTTPClient::setFollowRedirects(bool follow)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    _followRedirects = follow ? HTTPC_STRICT_FOLLOW_REDIRECTS : HTTPC_DISABLE_FOLLOW_REDIRECTS;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * set redirect follow mode. See `followRedirects_t` enum for avaliable modes.
 | 
					 * set redirect follow mode. See `followRedirects_t` enum for avaliable modes.
 | 
				
			||||||
 * @param follow
 | 
					 * @param follow
 | 
				
			||||||
@@ -1116,15 +954,6 @@ bool HTTPClient::connect(void)
 | 
				
			|||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(!_client && _transportTraits) {
 | 
					 | 
				
			||||||
        _tcpDeprecated = _transportTraits->create();
 | 
					 | 
				
			||||||
        if(!_tcpDeprecated) {
 | 
					 | 
				
			||||||
            DEBUG_HTTPCLIENT("[HTTP-Client] connect: could not create tcp\n");
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        _client = _tcpDeprecated.get();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if(!_client) {
 | 
					    if(!_client) {
 | 
				
			||||||
        DEBUG_HTTPCLIENT("[HTTP-Client] connect: HTTPClient::begin was not called or returned error\n");
 | 
					        DEBUG_HTTPCLIENT("[HTTP-Client] connect: HTTPClient::begin was not called or returned error\n");
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
@@ -1139,12 +968,6 @@ bool HTTPClient::connect(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    DEBUG_HTTPCLIENT("[HTTP-Client] connected to %s:%u\n", _host.c_str(), _port);
 | 
					    DEBUG_HTTPCLIENT("[HTTP-Client] connected to %s:%u\n", _host.c_str(), _port);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (_tcpDeprecated && !_transportTraits->verify(*_tcpDeprecated, _host.c_str())) {
 | 
					 | 
				
			||||||
        DEBUG_HTTPCLIENT("[HTTP-Client] transport level verify failed\n");
 | 
					 | 
				
			||||||
        _client->stop();
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef ESP8266
 | 
					#ifdef ESP8266
 | 
				
			||||||
    _client->setNoDelay(true);
 | 
					    _client->setNoDelay(true);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -163,14 +163,12 @@ public:
 | 
				
			|||||||
    bool begin(WiFiClient &client, const String& url);
 | 
					    bool begin(WiFiClient &client, const String& url);
 | 
				
			||||||
    bool begin(WiFiClient &client, const String& host, uint16_t port, const String& uri = "/", bool https = false);
 | 
					    bool begin(WiFiClient &client, const String& host, uint16_t port, const String& uri = "/", bool https = false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Plain HTTP connection, unencrypted
 | 
					    // old API is now explicitely forbidden
 | 
				
			||||||
    bool begin(String url)  __attribute__ ((deprecated));
 | 
					    bool begin(String url)  __attribute__ ((error("obsolete API, use ::begin(WiFiClient, url)")));
 | 
				
			||||||
    bool begin(String host, uint16_t port, String uri = "/")  __attribute__ ((deprecated));
 | 
					    bool begin(String host, uint16_t port, String uri = "/")  __attribute__ ((error("obsolete API, use ::begin(WiFiClient, host, port, uri)")));
 | 
				
			||||||
    // Use BearSSL for secure HTTPS connection
 | 
					    bool begin(String url, const uint8_t httpsFingerprint[20])  __attribute__ ((error("obsolete API, use ::begin(WiFiClientSecure, ...)")));
 | 
				
			||||||
    bool begin(String url, const uint8_t httpsFingerprint[20])  __attribute__ ((deprecated));
 | 
					    bool begin(String host, uint16_t port, String uri, const uint8_t httpsFingerprint[20])  __attribute__ ((error("obsolete API, use ::begin(WiFiClientSecure, ...)")));
 | 
				
			||||||
    bool begin(String host, uint16_t port, String uri, const uint8_t httpsFingerprint[20])  __attribute__ ((deprecated));
 | 
					    bool begin(String host, uint16_t port, String uri, bool https, String httpsFingerprint)  __attribute__ ((error("obsolete API, use ::begin(WiFiClientSecure, ...)")));
 | 
				
			||||||
    // deprecated, use the overload above instead
 | 
					 | 
				
			||||||
    bool begin(String host, uint16_t port, String uri, bool https, String httpsFingerprint)  __attribute__ ((deprecated));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void end(void);
 | 
					    void end(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -183,7 +181,6 @@ public:
 | 
				
			|||||||
    void setTimeout(uint16_t timeout);
 | 
					    void setTimeout(uint16_t timeout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Redirections
 | 
					    // Redirections
 | 
				
			||||||
    void setFollowRedirects(bool follow) __attribute__ ((deprecated));
 | 
					 | 
				
			||||||
    void setFollowRedirects(followRedirects_t follow);
 | 
					    void setFollowRedirects(followRedirects_t follow);
 | 
				
			||||||
    void setRedirectLimit(uint16_t limit); // max redirects to follow for a single request
 | 
					    void setRedirectLimit(uint16_t limit); // max redirects to follow for a single request
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -237,9 +234,6 @@ protected:
 | 
				
			|||||||
    int handleHeaderResponse();
 | 
					    int handleHeaderResponse();
 | 
				
			||||||
    int writeToStreamDataBlock(Stream * stream, int len);
 | 
					    int writeToStreamDataBlock(Stream * stream, int len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    TransportTraitsPtr _transportTraits;
 | 
					 | 
				
			||||||
    std::unique_ptr<WiFiClient> _tcpDeprecated;
 | 
					 | 
				
			||||||
    WiFiClient* _client;
 | 
					    WiFiClient* _client;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// request handling
 | 
					    /// request handling
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user