Próbuję uruchomić małego klienta Twittera i napotkałem problem podczas testowania wywołań API wymagających uwierzytelniania.Podstawowe uwierzytelnianie HTTP na iPhonie
Moje hasło zawiera specjalne znaki, więc gdy spróbuję użyć następującego kodu, to nie działa.
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];
Zacząłem zaglądać do base64 i umieszczać uwierzytelnianie w nagłówkach. Znalazłem wpis Dave Dribin's na jego implementacji base64 i wydawało się, że ma to sens. Jednak gdy próbowałem go użyć, kompilator zaczął narzekać, że nie mógł znaleźć bibliotek openssl. Czytałem więc, że muszę połączyć w bibliotece libcrypto, ale wydaje się, że nie istnieje dla iPhone'a.
Przeczytałem też ludzi, którzy mówią, że jabłko nie zezwala na aplikacje korzystające z bibliotek kryptograficznych, co nie ma dla mnie sensu.
Więc teraz utknąłem i zdezorientowany. Jaki jest najprostszy sposób na uzyskanie podstawowego uwierzytelnienia w mojej aplikacji?
Pozdrowienia
Zmieniłem sendSynchronous wezwanie do initWithRequest: wniosek delegata: self i następnie skonfiguruj didReceiveAuthenticationChallenge w delegate, ale nic nie zostanie wywołane. Próbowałem innych metod delegowania NSURLConnection i one też nie działały. Jakieś pomysły? – Meroon
Wyjaśniłem, dlaczego metody delegatów nie działają. Wywoływałam initWithRequest z metody klasy, która nie zadziała. Dzięki za pomoc. – Meroon
Przepraszam, niepotrzebnie lakoniczna odpowiedź (ale szczęśliwy, że dostałeś się tam na końcu).Rozbudowałem to. Mam nadzieję, że teraz jest bardziej użyteczny. –