Estoy tratando de ejecutar un pequeño cliente de Twitter y me encontré con un problema al probar las llamadas a la API que requieren autenticación.Autenticación HTTP básica en el iPhone
Mi contraseña tiene caracteres especiales, por lo que cuando intento utilizar el siguiente código, no funciona.
NSString *post = [NSString stringWithFormat:@"status=%@", [status stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@:%@@%@/statuses/update.json", username, password, TwitterHostname]];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLResponse *response;
NSError *error;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
Empecé a buscar en base64 y poner la autenticación en los encabezados. Encontré Dave Dribin's publicación en su implementación de base64, y parecía tener sentido. Sin embargo, cuando traté de usarlo, el compilador comenzó a quejarse de que no podía encontrar las bibliotecas de openssl. Así que leí que necesitaba vincular en la biblioteca libcrypto, pero no parece existir para iphone.
También he leído personas que dicen que Apple no permitirá las aplicaciones que usan bibliotecas de cifrado, lo cual no tiene sentido para mí.
Así que ahora estoy un poco atascado y confundido. ¿Cuál es la forma más fácil de obtener autenticación básica en mi aplicación?
Cheers
he cambiado la llamada sendSynchronous a initWithRequest: solicitud delegado: uno mismo y luego configura el evento didReceiveAuthenticationChallenge en el delegado, pero no se llama a nada. Probé otros métodos de delegado de NSURLConnection y tampoco funcionaron. ¿Algunas ideas? – Meroon
Descubrí por qué los métodos de delegado no funcionaban. Estaba llamando a initWithRequest desde un método de clase que no funcionará. Gracias por la ayuda. – Meroon
Lo siento, respuesta innecesariamente concisa (pero feliz de que hayas llegado al final).Lo he expandido. Espero que sea un poco más útil ahora. –