gpt4 book ai didi

cocoa - 需要有关 NSURLCredential initWithTrust : 的帮助

转载 作者:行者123 更新时间:2023-12-03 17:25:26 26 4
gpt4 key购买 nike

在过去的几个小时里,我一直在把头撞在墙上,但在任何地方都找不到哪怕一丝解决方案。我正在开发一个应用程序来学习如何使用 JSON,因此我只是构建一个简单的应用程序,它首先只返回我在 GitHub 上的所有存储库的列表。我能够毫无问题地从 NSURLConnection 返回的数据中提取 JSON 响应,不幸的是,当我尝试访问任何需要身份验证的内容时,响应始终为 {
message = "Not Found";
}
如果我发送请求只是获取有关我的用户名的公共(public)信息,我会收到包含所有正确信息的正确响应,这样我就知道我正在与 api.github.com 成功通信。首先启动我使用的请求:

    -(IBAction)retriveRepos:(id)sender
{
responseData = [[NSMutableData data] retain];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://api.github.com/user/repos"]];
[request setHTTPMethod:@"GET"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}

何时 - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge被调用身份验证方法返回为 NSURLAuthenticationMethodServerTrust (我觉得很奇怪,因为我觉得我应该提供用户名和密码来登录)。根据Apple的文档,我需要创建我的NSURLCredentialinitWithTrust: 。我用谷歌搜索答案,最后找到了一些地方,说只需要 serverTrust来自protectionSpace NSURLAuthenticationChallenge的这样做没有显示任何效果的迹象,事实上它看起来像我的 NSURLCredential里面几乎什么都没有。

if ([[challenge protectionSpace] authenticationMethod] == NSURLAuthenticationMethodServerTrust) {
NSLog(@"challenge.protectionSpace.serverTrust: %@", challenge.protectionSpace.serverTrust); // This logs "challenge.protectionSpace.serverTrust: <SecTrust 0x10340b2e0 [0x7fff7cc12ea0]>"
NSURLCredential *credential = [[NSURLCredential alloc] initWithTrust:challenge.protectionSpace.serverTrust];
NSLog(@"credential: %@", credential); // Always logs something like "credential: <NSURLCredential: 0x1002d2f20>: (null)"
NSURLCredential *otherCredential = [[NSURLCredential alloc] initWithUser:@"user" password:@"password" persistence:NSURLCredentialPersistencePermanent];
NSLog(@"otherCredential: %@", otherCredential); // This logs otherCredential: <NSURLCredential: 0x1018d0840>: user"
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}

我还使用了更广泛的日志记录,表明 credential事实上确实存在(起初我以为它根本没有被创建),但它没有设置任何属性 certificates: (null)
hasPassword: 0
identity: (null)
password: (null)
。我只能假设问题出在我的身份验证中,但我严格遵循了我发现的示例。我正在使用 Lion 的 GM 预览版,所以我想我可能发现了一个错误,或者 GitHub API 中存在一些错误,但考虑到我的技能水平,我发现我更有可能是一个正在寻找的白痴答案就在我面前。如果有人知道一个好的指南,它实际上可以引导您完成身份验证的所有步骤(最好是所有样式),而不是严重缺乏 Apple URL 加载指南,该指南只说使用一种方法,但没有说明 SecTrustRef 在哪里。来自它将不胜感激。

最佳答案

NSURLAuthenticationMethodServerTrust 是您在协商 SSL 连接时将得到的信息。它使您有机会评估服务器的信任度(反之亦然)。 Technote 2232对此进行了一些详细的描述。您的代表需要处理它,技术说明链接到示例代码高级 URL 连接的源代码,它应该向您展示如何应对该挑战。

不要绝望,如果有来自您的服务器的 HTTP 身份验证步骤,您稍后会看到代理收到该信息。

关于cocoa - 需要有关 NSURLCredential initWithTrust : 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6569110/

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