Я хочу прочитать содержимое веб-страницы, защищенной именем пользователя и паролем. это приложение для 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)]];
любая помощь будет принята с благодарностью, так как я немного разбираюсь в этой проблеме, не очень хорошо разбираясь в Какао, задача c, xcode только подливает масла в этот огонь для меня.