Skip to content

Commit

Permalink
Support deleting NSMutableURLRequest headers by calling setValue:forH…
Browse files Browse the repository at this point in the history
…TTPHeaderField: with nil value.
  • Loading branch information
triplef committed Nov 14, 2023
1 parent a67e28a commit fd7f11a
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 5 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
2023-11-14 Frederik Seiffert <frederik@algoriddim.com>

* Source/NSURLRequest.m: Support deleting NSMutableURLRequest headers by
calling setValue:forHTTPHeaderField: with nil value.
* Headers/Foundation/NSURLRequest.h: Update method documentation.
* Tests/base/NSURLRequest/basic.m: Extended NSMutableURLRequest tests.

2023-11-14 Richard Frith-Macdonald <rfm@gnu.org>

* Source/NSFileManager.m: Fix issue #292
Expand Down
5 changes: 3 additions & 2 deletions Headers/Foundation/NSURLRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -321,8 +321,9 @@ GS_EXPORT_CLASS
- (void) setHTTPShouldHandleCookies: (BOOL)should;

/**
* Sets the value for the sapecified header field, replacing any
* previously set value.
* Sets the value for the specified header field, replacing any
* previously set value. Setting a nil value deletes a previously set
* header field.
*/
- (void) setValue: (NSString *)value forHTTPHeaderField: (NSString *)field;

Expand Down
13 changes: 10 additions & 3 deletions Source/NSURLRequest.m
Original file line number Diff line number Diff line change
Expand Up @@ -403,8 +403,8 @@ - (void) setAllHTTPHeaderFields: (NSDictionary *)headerFields

if ([value isKindOfClass: [NSString class]] == YES)
{
[self setValue: (NSString*)value forHTTPHeaderField: field];
}
[self setValue: (NSString*)value forHTTPHeaderField: field];
}
}
}

Expand Down Expand Up @@ -444,7 +444,14 @@ - (void) setValue: (NSString *)value forHTTPHeaderField: (NSString *)field
{
this->headers = [_GSMutableInsensitiveDictionary new];
}
[this->headers setObject: value forKey: field];
if (value != nil)
{
[this->headers setObject: value forKey: field];
}
else
{
[this->headers removeObjectForKey: field];
}
}

@end
Expand Down
12 changes: 12 additions & 0 deletions Tests/base/NSURLRequest/basic.m
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,18 @@ int main()
[mutable addValue: @"value2" forHTTPHeaderField: @"gnustep"];
PASS_EQUAL([mutable valueForHTTPHeaderField: @"gnustep"], (@"value1,value2"),
"Handle multiple values for an HTTP header field");
[mutable setAllHTTPHeaderFields: [NSDictionary dictionaryWithObject: @"object" forKey: @"key"]];
PASS_EQUAL([mutable allHTTPHeaderFields],
[NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key", @"value1,value2", @"gnustep", nil],
"setAllHTTPHeaderFields adds header");
[mutable setValue: @"value3" forHTTPHeaderField: @"gnustep"];
PASS_EQUAL([mutable allHTTPHeaderFields],
[NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key", @"value3", @"gnustep", nil],
"Update header field");
[mutable setValue: nil forHTTPHeaderField: @"gnustep"];
PASS_EQUAL([mutable allHTTPHeaderFields],
[NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key", nil],
"Remove header field");
[mutable release];

mutable = [NSMutableURLRequest new];
Expand Down

0 comments on commit fd7f11a

Please sign in to comment.