Использование NSURLCredentialStorage с синхронным NSURLConnection - PullRequest
0 голосов
/ 03 августа 2010

У меня возникла проблема, очень похожая на этот вопрос: Могу ли я использовать NSURLCredentialStorage для базовой аутентификации HTTP?

Автор этого вопроса принял ответ, но позже объявил, что код решения возвращал NSURLErrorUserCancelledAuthentication ошибок. Я использую DIGEST аутентификацию, но в противном случае мой код делает то же самое и возвращает ту же ошибку.

Я не хочу отправлять имя пользователя и пароль в открытом тексте, поэтому я определенно не хочу просто указывать имя пользователя и пароль в начале URL-адреса. Есть ли какой-нибудь способ получить метод NSURLConnection sendSynchronousRequest:returningResponse:error: для обращения к общему NSURLCredentialStorage? Звучит так, как будто бы категория была бы полезна, но у меня нет ни малейшего представления о том, как я это сделаю - похоже, мне пришлось бы полностью переопределить метод sendSynchronousRequest:returningResponse:error:, чтобы заставить его работать .

Как мне выполнить синхронное URL-соединение, которое обращается к общему NSURLCredentialStorage?

Ответы [ 2 ]

3 голосов
/ 14 февраля 2013

Абсолютно вы можете. Создайте NSURLCredential и добавьте NSURLCredentialStorage в качестве по умолчанию для пространства защиты. Пример:

// Permananent, session, whatever.
NSURLCredential *credential = [NSURLCredential credentialWithUser:username password:password persistence: NSURLCredentialPersistencePermanent];
// Make sure that if the server you are accessing presents a realm, you set it here.
NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:@"blah.com" port:0 protocol:@"http" realm:nil authenticationMethod:NSURLAuthenticationMethodHTTPBasic];
// Store it
[[NSURLCredentialStorage sharedCredentialStorage] setDefaultCredential:credential forProtectionSpace:protectionSpace];

На этом этапе любое последующее NSURLConnection, которое оспаривается с использованием пространства защиты, которое совпадает с тем, которое вы установили, будет использовать эти учетные данные

0 голосов
/ 05 августа 2010

Это может не полностью ответить на ваш вопрос, но: синхронные выборки через NSURLConnection имеют массу проблем (аутентификация - наименьшая), и, если это вообще возможно, вы должны действительно реструктурировать свое приложение, чтобы вместо этого использовать асинхронный API, которая, скорее всего, не будет иметь проблемы, которую вы видите в отношении аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...