Я новичок в iOS и https. Я начинаю ученик программного обеспечения. Я хочу написать приложение, которое извлекает данные (например, номер класса, объявления и т. Д.) Из моей учетной записи uni и показывает мне в моем приложении.NSURLCredential-credentialForTrust vs username: password
Как правило, я перехожу на страницу студента uni, логин с моим именем пользователя и паролем, и эта информация появилась в браузере.
Я пробовал использовать NSURLConnection и его делегата. посмотрите мой код ниже. В начале в соединении метода: didReceviveAuthenticationChallenge, я создал объект NSURLCredential [NSURLCredential withUser: password: persistence]. И он не работал. Затем я попытался выполнить NSLog, после чего я узнал, что метод protectionSpace.authenticationMethod - это NSURLAuthenticationMethodServerTrust.
Затем я попытался прочитать документ Apple и некоторые источники в googled. Но я не могу получить его, а затем отредактировал свой код, как вы видели ниже (это мое окончательное издание, и оно все еще не работает).
Дело в том, что я действительно не получаю: я ожидаю, что сервер спросит меня о моем имени пользователя и пароле. Вместо этого он попросил credentialForTrust, который на основе этих документов, которые я прочитал, предлагает мне оценить доверие делегата NSURLConnection к серверу. Однако сервер никогда не запрашивал имя пользователя и пароль. так, как сервер может узнать, к какой учетной записи я обращаюсь.
Итак, я думаю, что это должно быть какое-то отношение между этим сертификатом (доверием) с именем пользователя и паролем. Я действительно не понимаю, как это работает.
Я думаю, мой вопрос может быть не совсем понятным или чем-то, и это может быть глупо. Я принимаю это, потому что я никогда не узнал все эти вещи.
Итак, пожалуйста, кто-нибудь объяснит мне, как это работает. Вы можете предположить, что у меня есть некоторое базовое понимание того, что такое https, SSL, NSURLConnection, NSURLCredential и т. Д. И, пожалуйста, направляйте меня к решению.
Я ценю за все ваши усилия.
Ниже мой код, (он не работает).
The NSLog() в связи: didReceiveAuthenticationChallenge, распечатать "NSURLAuthenticationMethodServerTrust"
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace
{
return YES;
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
NSLog(@"authenticationMethod is: %@\n",challenge.protectionSpace.authenticationMethod);
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}else{
NSURLCredential *creden = [[NSURLCredential alloc] initWithUser:myusername password:mypassword persistence:NSURLCredentialPersistenceForSession];
[[challenge sender] useCredential:creden forAuthenticationChallenge:challenge];
}
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"didFailWithError: %@\n %@\n",
[error localizedDescription],
[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.myData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[self.myData setLength:0];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *str = [[NSString alloc] initWithData:self.myData encoding:NSASCIIStringEncoding];
NSLog(@"Data in String %@", str);
}