From f3af0feefcd864f56f1c4cf42e46d2ba2e280583 Mon Sep 17 00:00:00 2001 From: Marc Weil Date: Sun, 5 Dec 2010 12:07:41 -0500 Subject: [PATCH] Adding authentiction headers to request before sending to stop challenge responses from being generated server-side on each request. This should cut down overall request-response cycles by 50% when dealing with authenticated services. --- Code/Network/RKRequest.m | 13 ++++++++++++- Code/Network/RKResponse.m | 14 -------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/Code/Network/RKRequest.m b/Code/Network/RKRequest.m index 0dc3e8f9..683e4fee 100644 --- a/Code/Network/RKRequest.m +++ b/Code/Network/RKRequest.m @@ -70,7 +70,18 @@ if ([_params respondsToSelector:@selector(HTTPHeaderValueForContentLength)]) { [_URLRequest setValue:[NSString stringWithFormat:@"%d", [_params HTTPHeaderValueForContentLength]] forHTTPHeaderField:@"Content-Length"]; } - } + } + if (_username != nil) { + // Add authentication headers so we don't have to deal with an extra cycle for each message requiring basic auth. + CFHTTPMessageRef dummyRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, (CFStringRef)[self HTTPMethod], (CFURLRef)[self URL], kCFHTTPVersion1_1); + CFHTTPMessageAddAuthentication(dummyRequest, nil, (CFStringRef)_username, (CFStringRef)_password, kCFHTTPAuthenticationSchemeBasic, FALSE); + CFStringRef authorizationString = CFHTTPMessageCopyHeaderFieldValue(dummyRequest, CFSTR("Authorization")); + + [_URLRequest setValue:(NSString *)authorizationString forHTTPHeaderField:@"Authorization"]; + + CFRelease(dummyRequest); + CFRelease(authorizationString); + } NSLog(@"Headers: %@", [_URLRequest allHTTPHeaderFields]); } diff --git a/Code/Network/RKResponse.m b/Code/Network/RKResponse.m index b2b6772c..cee3b440 100644 --- a/Code/Network/RKResponse.m +++ b/Code/Network/RKResponse.m @@ -52,20 +52,6 @@ [super dealloc]; } -// Handle basic auth --(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { - if ([challenge previousFailureCount] == 0) { - NSURLCredential *newCredential; - newCredential=[NSURLCredential credentialWithUser:[NSString stringWithFormat:@"%@", _request.username] - password:[NSString stringWithFormat:@"%@", _request.password] - persistence:NSURLCredentialPersistenceNone]; - [[challenge sender] useCredential:newCredential - forAuthenticationChallenge:challenge]; - } else { - [[challenge sender] cancelAuthenticationChallenge:challenge]; - } -} - - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { if (NO == _loading) { _loading = YES;