1

https 経由で認証するために NSURLConnection を使用していますが、これは正常に動作しますが、NSData を使用してファイルをダウンロードすると、コンテンツにアクセスできません。認証された URL を介してファイルをダウンロードするにはどうすればよいですか?

ダウンロードしたファイルの内容を読み込もうとしているところです(認証コードはここには含まれていません)、サーバーは「ユーザーは許可されていません」と言います:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

 NSFileManager *fileManager = [NSFileManager defaultManager];

            // Attempt to open the file and write the downloaded data to it
          if (![fileManager fileExistsAtPath:documentsDirectory2]) { //download path
                [fileManager createFileAtPath:documentsDirectory2 contents:nil attributes:nil];
            }
            // Append data to end of file
            NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:documentsDirectory2];
            [fileHandle seekToEndOfFile];
            [fileHandle writeData:data];
            [fileHandle closeFile];



            //data.txt exists, read me its content
            NSArray *paths8 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory8 = [paths8 objectAtIndex:0];
            NSString *filePath8 = [documentsDirectory8 stringByAppendingPathComponent:@"data.txt"];
            NSString *content8 = [NSString stringWithContentsOfFile:filePath8 encoding:NSUTF8StringEncoding error:NULL];
            NSLog(@"WHATS INSIDE DATA.TXT? =%@", content8);

            [self.responseData appendData:data];
           }
4

1 に答える 1

1

NSURLConnectionDelegate の実装中に認証するには、NSURLCredential を使用する必要があります。

例を次に示します。

-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace
{
    return YES;
}

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSURLCredential *credential = [NSURLCredential credentialWithUser:username
                                                             password:passwd]
                                                             persistence:NSURLCredentialPersistenceForSession];

    [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}
于 2012-10-08T01:23:52.743 に答える