Вопрос

Я хочу прочитать содержимое веб-страницы, защищенной именем пользователя и паролем.это приложение для Mac OS X, а НЕ приложение для iPhone, поэтому большинство вещей, которые я читал здесь или мне предлагали прочитать, похоже, не работают.

Кроме того, я новичок в Xcode и Obj C. Мне посоветовали взглянуть на веб-сайт, на котором представлен пример кода для HTTP-аутентификации, однако до сих пор мне не удавалось заставить это работать.

ниже приведен основной код для нажатия кнопки в моем приложении. Ниже также есть еще один модуль под названием Base64, в котором есть некоторый код, который мне пришлось изменить, чтобы даже его скомпилировать (не знаю, правильно ли то, что я изменил, заметьте).

NSURL *url = [NSURL URLWithString:@"my URL"];  
NSString *userName = @"UN";  
NSString *password = @"PW";  

NSError *myError = nil;  

// create a plaintext string in the format username:password  
NSMutableString *loginString = (NSMutableString*)[@"" stringByAppendingFormat:@"%@:%@", userName, password];  

// employ the Base64 encoding above to encode the authentication tokens  
char *encodedLoginData = [base64 encode:[loginString dataUsingEncoding:NSUTF8StringEncoding]];  

// create the contents of the header   
NSString *authHeader = [@"Basic " stringByAppendingFormat:@"%@", [NSString stringWithCString:encodedLoginData length:strlen(encodedLoginData)]];  
//NSString *authHeader = [@"Basic " stringByAppendingFormat:@"%@", loginString];//[NSString stringWithString:loginString length:strlen(loginString)]]; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url cachePolicy: NSURLRequestReloadIgnoringCacheData timeoutInterval: 3];     

// add the header to the request.  Here's the $$$!!!  
[request addValue:authHeader forHTTPHeaderField:@"Authorization"];  

// perform the reqeust  
NSURLResponse *response;  

NSData *data = [NSURLConnection    
    sendSynchronousRequest: request    
    returningResponse: &response    
    error: &myError];    
//*error = myError;  

// POW, here's the content of the webserver's response.  
NSString *result = [NSString stringWithCString:[data bytes] length:[data length]];
[myTextView setString:result];

код из файла BASE64

#import "base64.h"

static char *alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-";  

@implementation Base64  
    +(char *)encode:(NSData *)plainText {  
        // create an adequately sized buffer for the output.  every 3 bytes   
        // become four basically with padding to the next largest integer  
        // divisible by four.   
        char * encodedText = malloc((((([plainText length] % 3) +  
            [plainText length]) / 3) * 4) + 1);  
        char* inputBuffer = malloc([plainText length]);  
        inputBuffer = (char *)[plainText bytes];  

        int i;  
        int j = 0;  

        // encode, this expands every 3 bytes to 4  
        for(i = 0; i < [plainText length]; i += 3) {  
            encodedText[j++] = alphabet[(inputBuffer[i] & 0xFC) >> 2];  
            encodedText[j++] = alphabet[((inputBuffer[i] & 0x03) << 4)  
                | ((inputBuffer[i + 1] & 0xF0) >> 4)];  

            if(i + 1 >= [plainText length])  
                // padding  
                encodedText[j++] = '=';  
            else   
                encodedText[j++] = alphabet[((inputBuffer[i + 1] & 0x0F) << 2)  
                | ((inputBuffer[i + 2] & 0xC0) >> 6)];  

            if(i + 2 >= [plainText length])  
                // padding  
                encodedText[j++] = '=';  
            else  
                encodedText[j++] = alphabet[inputBuffer[i + 2] & 0x3F];  
        }  

        // terminate the string  
        encodedText[j] = 0;  

        return encodedText;//outputBuffer;  
    }  
@end  

при выполнении кода он останавливается на следующей строке с EXC_BAD_ACCESS?!?!?

NSString *authHeader = [@"Basic " stringByAppendingFormat:@"%@",   
    [NSString stringWithCString:encodedLoginData length:strlen(encodedLoginData)]]; 

буду признателен за любую помощь, так как я немного не разбираюсь в этой проблеме, не очень разбираюсь в Cocoa, цель c, xcode для меня только подливает масла в огонь.

Это было полезно?

Решение

В главе 6 моей книги об iPhone есть пример http-аутентификации (тот же код будет работать и на настольном компьютере).

Вы можете скачать пример кода здесь:

http://objective-d.com/iphonebook

Ваше здоровье,

д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top