使用凭据进行HTTP连接以获取HTML文档

时间:2013-03-31 14:22:04

标签: iphone html objective-c xcode http

我想下载一个HTML文档来解析内容。服务器在进入此站点之前要求输入我的用户凭据。在Java中,我通过基本身份验证到达了这样的异步任务(JSoup):

String base64login = new String(Base64.encodeBase64(loginDaten.getBytes()));
Document parsableDoc = Jsoup.connect(myUrl).header("Authorization","Basic"+base64login)
   .timeout(3000)
   .get();

但是在Objective-C中它没有像我想象的那么简单。在这里,我想将网站保存在NSData-Object或类似的东西中(例如NSString)。有什么想法尽可能简单地解决这个问题? (我在这个领域是个专业人士,你可以看到......)

1 个答案:

答案 0 :(得分:0)

您可以使用NSURLConnection类广告NSMutableURLRequest执行此操作。我们的想法是让NSMutableURLRequest知道您要使用哪种auth方法,以及凭据(登录/密码)。 以下代码应该这样做。 (您将需要此链接中的base64Encoding的NSdata类别http://cocoadev.com/wiki/BaseSixtyFour

self.receivedData = [[NSMutableData alloc] init];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
NSString *authStr = [NSString stringWithFormat:@"%@:%@", @"login",@"password"];
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64Encoding]];
[request setValue:authValue forHTTPHeaderField:@"Authorization"];

NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self];


-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
   [self.receivedData appendData:data];
}


- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
   if ([self.receivedData length] >0)
      NSString *result = [[NSString alloc] initWithData:downloadedData encoding:NSUTF8StringEncoding];
      NSLog(@"The HTML String Is : %@", result);

{