Do not add headers for params if the request is a GET or a HEAD. refs #303

This commit is contained in:
Blake Watters
2011-08-27 19:10:48 -04:00
parent 3832ec7b9f
commit 218555b195
2 changed files with 30 additions and 2 deletions

View File

@@ -133,8 +133,11 @@
[super dealloc];
}
- (BOOL)shouldSendParams {
return (_params && (_method != RKRequestMethodGET && _method != RKRequestMethodHEAD));
}
- (void)setRequestBody {
if (_params && (_method != RKRequestMethodGET && _method != RKRequestMethodHEAD)) {
if ([self shouldSendParams]) {
// Prefer the use of a stream over a raw body
if ([_params respondsToSelector:@selector(HTTPBodyStream)]) {
// NOTE: This causes the stream to be retained. For RKParams, this will
@@ -168,7 +171,7 @@
[_URLRequest setValue:[_additionalHTTPHeaders valueForKey:header] forHTTPHeaderField:header];
}
if (_params != nil) {
if ([self shouldSendParams]) {
// Temporarily support older RKRequestSerializable implementations
if ([_params respondsToSelector:@selector(HTTPHeaderValueForContentType)]) {
[_URLRequest setValue:[_params HTTPHeaderValueForContentType] forHTTPHeaderField:@"Content-Type"];

View File

@@ -611,4 +611,29 @@
assertThatBool([loader.response isOK], is(equalToBool(YES)));
}
- (void)itShouldNotAddANonZeroContentLengthHeaderIfParamsIsSetAndThisIsAGETRequest {
RKClient* client = RKSpecNewClient();
client.disableCertificateValidation = YES;
NSURL* URL = [NSURL URLWithString:@"https://blakewatters.com/"];
RKSpecResponseLoader* loader = [RKSpecResponseLoader responseLoader];
RKRequest* request = [RKRequest requestWithURL:URL delegate:loader];
request.params = [NSDictionary dictionaryWithObject:@"foo" forKey:@"bar"];
[request send];
[loader waitForResponse];
assertThat([request.URLRequest valueForHTTPHeaderField:@"Content-Length"], is(equalTo(@"0")));
}
- (void)itShouldNotAddANonZeroContentLengthHeaderIfParamsIsSetAndThisIsAHEADRequest {
RKClient* client = RKSpecNewClient();
client.disableCertificateValidation = YES;
NSURL* URL = [NSURL URLWithString:@"https://blakewatters.com/"];
RKSpecResponseLoader* loader = [RKSpecResponseLoader responseLoader];
RKRequest* request = [RKRequest requestWithURL:URL delegate:loader];
request.method = RKRequestMethodHEAD;
request.params = [NSDictionary dictionaryWithObject:@"foo" forKey:@"bar"];
[request send];
[loader waitForResponse];
assertThat([request.URLRequest valueForHTTPHeaderField:@"Content-Length"], is(equalTo(@"0")));
}
@end