@@ -90,9 +90,6 @@ HTTPClient::~HTTPClient() {
9090 if (_client) {
9191 _client->stop ();
9292 }
93- if (_currentHeaders) {
94- delete[] _currentHeaders;
95- }
9693 if (_tcpDeprecated) {
9794 _tcpDeprecated.reset (nullptr );
9895 }
@@ -564,9 +561,12 @@ int HTTPClient::sendRequest(const char *type, uint8_t *payload, size_t size) {
564561 bool redirect = false ;
565562 uint16_t redirectCount = 0 ;
566563 do {
567- // wipe out any existing headers from previous request
568- for (size_t i = 0 ; i < _headerKeysCount; i++) {
569- if (_currentHeaders[i].value .length () > 0 ) {
564+ // wipe out any existing headers from previous request, but preserve the keys if collecting specific headers
565+ if (_collectAllHeaders) {
566+ _currentHeaders.clear ();
567+ } else {
568+ // Only clear values, keep the keys for specific header collection
569+ for (size_t i = 0 ; i < _currentHeaders.size (); ++i) {
570570 _currentHeaders[i].value .clear ();
571571 }
572572 }
@@ -1015,19 +1015,24 @@ void HTTPClient::addHeader(const String &name, const String &value, bool first,
10151015 }
10161016}
10171017
1018+ void HTTPClient::collectAllHeaders (bool collectAll) {
1019+ _collectAllHeaders = collectAll;
1020+ }
1021+
10181022void HTTPClient::collectHeaders (const char *headerKeys[], const size_t headerKeysCount) {
1019- _headerKeysCount = headerKeysCount;
1020- if (_currentHeaders) {
1021- delete[] _currentHeaders ;
1023+ if (_collectAllHeaders) {
1024+ log_w ( " collectHeaders is ignored when collectAllHeaders is set " );
1025+ return ;
10221026 }
1023- _currentHeaders = new RequestArgument[_headerKeysCount];
1024- for (size_t i = 0 ; i < _headerKeysCount; i++) {
1027+ _currentHeaders.clear ();
1028+ _currentHeaders.resize (headerKeysCount);
1029+ for (size_t i = 0 ; i < headerKeysCount; i++) {
10251030 _currentHeaders[i].key = headerKeys[i];
10261031 }
10271032}
10281033
10291034String HTTPClient::header (const char *name) {
1030- for (size_t i = 0 ; i < _headerKeysCount ; ++i) {
1035+ for (size_t i = 0 ; i < _currentHeaders. size () ; ++i) {
10311036 if (_currentHeaders[i].key .equalsIgnoreCase (name)) {
10321037 return _currentHeaders[i].value ;
10331038 }
@@ -1036,25 +1041,25 @@ String HTTPClient::header(const char *name) {
10361041}
10371042
10381043String HTTPClient::header (size_t i) {
1039- if (i < _headerKeysCount ) {
1044+ if (i < _currentHeaders. size () ) {
10401045 return _currentHeaders[i].value ;
10411046 }
10421047 return String ();
10431048}
10441049
10451050String HTTPClient::headerName (size_t i) {
1046- if (i < _headerKeysCount ) {
1051+ if (i < _currentHeaders. size () ) {
10471052 return _currentHeaders[i].key ;
10481053 }
10491054 return String ();
10501055}
10511056
10521057int HTTPClient::headers () {
1053- return _headerKeysCount ;
1058+ return _currentHeaders. size () ;
10541059}
10551060
10561061bool HTTPClient::hasHeader (const char *name) {
1057- for (size_t i = 0 ; i < _headerKeysCount ; ++i) {
1062+ for (size_t i = 0 ; i < _currentHeaders. size () ; ++i) {
10581063 if ((_currentHeaders[i].key .equalsIgnoreCase (name)) && (_currentHeaders[i].value .length () > 0 )) {
10591064 return true ;
10601065 }
@@ -1238,17 +1243,14 @@ int HTTPClient::handleHeaderResponse() {
12381243 setCookie (date, headerValue);
12391244 }
12401245
1241- for (size_t i = 0 ; i < _headerKeysCount; i++) {
1242- if (_currentHeaders[i].key .equalsIgnoreCase (headerName)) {
1243- // Uncomment the following lines if you need to add support for multiple headers with the same key:
1244- // if (!_currentHeaders[i].value.isEmpty()) {
1245- // // Existing value, append this one with a comma
1246- // _currentHeaders[i].value += ',';
1247- // _currentHeaders[i].value += headerValue;
1248- // } else {
1249- _currentHeaders[i].value = headerValue;
1250- // }
1251- break ; // We found a match, stop looking
1246+ if (_collectAllHeaders && headerName.length () > 0 ) {
1247+ _currentHeaders.emplace_back (headerName, headerValue);
1248+ } else {
1249+ for (size_t i = 0 ; i < _currentHeaders.size (); ++i) {
1250+ if (_currentHeaders[i].key .equalsIgnoreCase (headerName)) {
1251+ _currentHeaders[i].value = headerValue;
1252+ break ; // We found a match, stop looking
1253+ }
12521254 }
12531255 }
12541256 }
0 commit comments