Я пытаюсь запустить небольшой клиент Twitter, и я столкнулся с проблемой при тестировании вызовов API, требующих проверки подлинности.Базовая аутентификация HTTP на iPhone
В моем пароле есть специальные символы, поэтому, когда я пытаюсь использовать следующий код, он не работает.
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 и помещал аутентификацию в заголовки. Я нашел Dave Dribin's сообщение о его реализации base64, и это, казалось, имело смысл. Однако, когда я попытался использовать его, компилятор начал жаловаться на то, как он не смог найти библиотеки openssl. Поэтому я прочитал, что мне нужно связать библиотеку libcrypto, но, похоже, для iphone она не существует.
Я также читал людей, говорящих, что яблоко не позволит приложениям, использующим крипто-библиотеки, что для меня не имеет смысла.
Так что теперь я немного застрял и смущен. Какой самый простой способ получить базовую аутентификацию в моем приложении?
Cheers
Я изменил sendSynchronous вызов initWithRequest: запрос делегата: я и затем настройте didReceiveAuthenticationChallenge в делегате, но ничего не вызвано. Я пробовал другие методы делегата NSURLConnection, и они тоже не работали. Есть идеи? – Meroon
Я понял, почему методы делегата не работают. Я вызывал initWithRequest из метода класса, который не будет работать. Спасибо за помощь. – Meroon
Извините, излишне краткий ответ (но рад, что вы попали туда в конце).Я расширил его. Надеюсь, теперь это немного полезно. –