@@ -90,9 +90,6 @@ HTTPClient::~HTTPClient() {
90
90
if (_client) {
91
91
_client->stop ();
92
92
}
93
- if (_currentHeaders) {
94
- delete[] _currentHeaders;
95
- }
96
93
if (_tcpDeprecated) {
97
94
_tcpDeprecated.reset (nullptr );
98
95
}
@@ -564,9 +561,12 @@ int HTTPClient::sendRequest(const char *type, uint8_t *payload, size_t size) {
564
561
bool redirect = false ;
565
562
uint16_t redirectCount = 0 ;
566
563
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) {
570
570
_currentHeaders[i].value .clear ();
571
571
}
572
572
}
@@ -1015,19 +1015,24 @@ void HTTPClient::addHeader(const String &name, const String &value, bool first,
1015
1015
}
1016
1016
}
1017
1017
1018
+ void HTTPClient::collectAllHeaders (bool collectAll) {
1019
+ _collectAllHeaders = collectAll;
1020
+ }
1021
+
1018
1022
void 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 ;
1022
1026
}
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++) {
1025
1030
_currentHeaders[i].key = headerKeys[i];
1026
1031
}
1027
1032
}
1028
1033
1029
1034
String HTTPClient::header (const char *name) {
1030
- for (size_t i = 0 ; i < _headerKeysCount ; ++i) {
1035
+ for (size_t i = 0 ; i < _currentHeaders. size () ; ++i) {
1031
1036
if (_currentHeaders[i].key .equalsIgnoreCase (name)) {
1032
1037
return _currentHeaders[i].value ;
1033
1038
}
@@ -1036,25 +1041,25 @@ String HTTPClient::header(const char *name) {
1036
1041
}
1037
1042
1038
1043
String HTTPClient::header (size_t i) {
1039
- if (i < _headerKeysCount ) {
1044
+ if (i < _currentHeaders. size () ) {
1040
1045
return _currentHeaders[i].value ;
1041
1046
}
1042
1047
return String ();
1043
1048
}
1044
1049
1045
1050
String HTTPClient::headerName (size_t i) {
1046
- if (i < _headerKeysCount ) {
1051
+ if (i < _currentHeaders. size () ) {
1047
1052
return _currentHeaders[i].key ;
1048
1053
}
1049
1054
return String ();
1050
1055
}
1051
1056
1052
1057
int HTTPClient::headers () {
1053
- return _headerKeysCount ;
1058
+ return _currentHeaders. size () ;
1054
1059
}
1055
1060
1056
1061
bool HTTPClient::hasHeader (const char *name) {
1057
- for (size_t i = 0 ; i < _headerKeysCount ; ++i) {
1062
+ for (size_t i = 0 ; i < _currentHeaders. size () ; ++i) {
1058
1063
if ((_currentHeaders[i].key .equalsIgnoreCase (name)) && (_currentHeaders[i].value .length () > 0 )) {
1059
1064
return true ;
1060
1065
}
@@ -1238,17 +1243,14 @@ int HTTPClient::handleHeaderResponse() {
1238
1243
setCookie (date, headerValue);
1239
1244
}
1240
1245
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
+ }
1252
1254
}
1253
1255
}
1254
1256
}
0 commit comments