当前位置:  开发笔记 > 前端 > 正文

iPhone上的基本HTTP身份验证

如何解决《iPhone上的基本HTTP身份验证》经验,为你挑选了1个好方法。

我正在尝试运行一个小型的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并将身份验证放入标头中.我在他的base64实现中发现了Dave Dribin的帖子,这看起来很有道理.但是,当我尝试使用它时,编译器开始抱怨它无法找到openssl库.所以我读到我需要在libcrypto库中链接,但它似乎不存在于iphone.

我还读过有人说苹果不会允许使用加密库的应用程序,这对我来说没有意义.

所以现在我有点困惑和困惑.在我的应用程序中获取基本身份验证的最简单方法是什么?

干杯



1> Stephen Darl..:

两件事情.首先,您必须使用异步方法而不是同步/类方法.

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;

使用异步方法往往会提供更好的用户体验,因此即使没有进行身份验证的能力,即使有额外的复杂性也值得做.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有