Reputation: 46718
I am in a situation where I need to send authentication (basic HTTP Authentication) to a server but the server does not send me a challenge first. This has been tracked down to be a duplicate of the wget switch --auth-no-challenge. My problem is, I do not see any way to get NSURL to do this.
I have implemented basic authentication in my NSURLConnection delegate but the -connection: didReceiveAuthenticationChallenge:
method is not getting called.
Is there any way to force this call or to embed the authentication information for this strange situation?
Upvotes: 6
Views: 4131
Reputation: 707
Just stumbled upon this post, and event though it's been a few years I just implemented this functionality in iOS7 for my app using built-in base64-encoding without any 3rd-party libs.
For what it's worth;
NSString *credentials = [NSString stringWithFormat:@"%@:%@", username, password];
NSData* credentialsData = [NSData dataWithBytes:[credentials UTF8String] length:strlen([credentials UTF8String])];
credentials = [credentialsData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
NSString *authStr = [NSString stringWithFormat:@"Basic %@", credentials];
[urlRequest setValue:authStr forHTTPHeaderField:@"Authorization"];
Upvotes: 0
Reputation: 9507
You can add the authorization information to the request manually by adding it to the request header like so:
NSString *authString = [[[NSString stringWithFormat:@"%@:%@",user, password] dataUsingEncoding:NSUTF8StringEncoding] base64Encoding];
[request setValue:[NSString stringWithFormat:@"Basic %@", authString] forHTTPHeaderField:@"Authorization"];
Where request is your NSMutableURLRequest and user/password are your respective username and password NSString's
I've been using this approach with an API from the iphone where the extra challenge is not being initiated by the server.
Upvotes: 8
Reputation: 46051
I believe you can add the username and password to the NSURL
Example
NSURL *url = [NSURL URLWithString:@"http://username:[email protected]/"];
Upvotes: 9