Основная HTTP-аутентификация на iPhone

Я пытаюсь запустить небольшой клиент Twitter, и я столкнулся с проблемой при тестировании вызовов API, требующих проверки подлинности.

В моем пароле есть специальные символы, поэтому, когда я пытаюсь использовать следующий код, он не работает.

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]; 

Я начал изучать base64 и помещал аутентификацию в заголовки. Я нашел запись Дейва Дрибина на его основе64, и это, казалось, имело смысл. Однако, когда я попытался использовать его, компилятор начал жаловаться на то, как он не смог найти библиотеки openssl. Поэтому я прочитал, что мне нужно связать библиотеку libcrypto, но, похоже, для iphone она не существует.

Я также читал людей, говорящих, что яблоко не позволит приложениям, использующим криптографические библиотеки, для меня это не имеет смысла.

Так что теперь я немного застрял и смутился. Какой самый простой способ получить базовую аутентификацию в моем приложении?

ура

Две вещи. Во-первых, вы должны использовать методы async, а не метод synchronous / class.

 NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:req] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; // create the connection with the request // and start loading the data NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

Управление аутентификацией осуществляется путем реализации этого метода в вашем делетете:

 - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 

И вам, вероятно, также придется реализовать эти методы:

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error; - (void)connectionDidFinishLoading:(NSURLConnection *)connection; 

Использование метода async имеет тенденцию давать лучший пользовательский опыт в любом случае, поэтому, несмотря на дополнительную сложность, стоит делать даже без возможности аутентификации.

Вы можете напрямую написать письмо с именем пользователя и паролем в главном URL-адресе, то есть https: // имя пользователя: [email protected]/

Прежде всего вам нужно позвонить в файл делегата NSURLConnection: –

  • (BOOL): (NSURLConnection *) соединение canAuthenticateAgainstProtectionSpace: (NSURLProtectionSpace *) protectionSpace

    {

    return YES; }

а затем вызвать – (void) соединение: (NSURLConnection *) соединение didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *) вызов

 { if ([challenge previousFailureCount] == 0) { NSURLCredential *newCredential; newCredential = [NSURLCredential credentialWithUser:@"username" password:@"password" persistence:NSURLCredentialPersistenceForSession]; NSLog(@"NEwCred:- %@ %@", newCredential, newCredential); [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge]; } else { [[challenge sender] cancelAuthenticationChallenge:challenge]; NSLog (@"failed authentication"); } } 
  • Есть ли способ для Interface Builder визуализировать представления IBDesignable, которые не переопределяют drawRect:
  • Чтение информации в формате MP3 с использованием объектива c
  • Что означает Apple, когда говорят, что NSManagedObjectContext принадлежит streamу или очереди, которые его создали?
  • Генерация случайных чисел в Objective-C
  • Создайте экземпляр объекта object-c по имени?
  • Преобразование RGB-данных в bitmap в Objective-C ++ Cocoa
  • NSPredicate: фильтрация объектов по дням свойства NSDate
  • Преобразовать десятичную дробную часть в Objective-C?
  • Преобразование цели-c typedef в его эквивалент строки
  • Выход препроцессора Xcode
  • В чем разница между ссылкой __weak и __block?
  • Давайте будем гением компьютера.