gpt4 book ai didi

cocoa 基本 HTTP 身份验证 : Advice Needed

转载 作者:可可西里 更新时间:2023-11-01 17:15:47 25 4
gpt4 key购买 nike

我想阅读受用户名和密码保护的网页内容。这是一个 mac OS X 应用程序,不是 iphone 应用程序,所以我在这里阅读或建议阅读的大部分内容似乎都不起作用。

此外,我完全是 Xcode 和 Obj C 的初学者,有人告诉我看一下为 http auth 提供示例代码的网站,但是到目前为止,我运气不太好。

下面是我的应用程序中按钮按下的主要代码,下面还有另一个名为 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、 objective-c 不是很了解,xcode 只是为我火上浇油。

最佳答案

我的 iPhone 书的第 6 章有一个关于 http 身份验证的示例(相同的代码将在桌面上运行)。

您可以从这里下载示例代码:

http://objective-d.com/iphonebook

干杯,

d.

关于 cocoa 基本 HTTP 身份验证 : Advice Needed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2471266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com