gpt4 book ai didi

Objective-C SSL同步连接

转载 作者:太空狗 更新时间:2023-10-30 04:01:45 24 4
gpt4 key购买 nike

我对 Objective-C 有点陌生,但遇到了一个我无法解决的问题,主要是因为我不确定我是否正确实现了解决方案。

我正在尝试使用同步连接连接到带有自签名证书的 https 站点。我得到了

Error Domain=NSURLErrorDomain Code=-1202 “不受信任的服务器证书”

我在这个论坛上看到了一些解决方案的错误。我找到的解决方案是添加:

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];

}

NSURLDelegate 接受所有证书。当我仅使用以下方式连接到该站点时:

NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://examplesite.com/"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];  
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

它工作正常,我看到挑战被接受了。但是,当我尝试使用同步连接进行连接时,我仍然收到错误消息,并且在我输入日志记录时没有看到调用的质询函数。

如何获得同步连接以使用质询方法?它与 URLConnection 的 delegate:self 部分有关吗?我还在 NSURLDelegate 中记录了发送/接收数据的日志,这是由我的连接函数调用的,而不是由同步函数调用的。

我在同步部分使用的是:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:@"https://examplesite.com/"]];  
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [[NSString stringWithString:@"username=mike"] dataUsingEncoding: NSUTF8StringEncoding]];
dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"%@", error);
stringReply = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding];
NSLog(@"%@", stringReply);
[stringReply release];
NSLog(@"Done");

就像我提到的,我对 Objective-C 有点陌生,所以请善待 :)

感谢您的帮助。迈克

最佳答案

根据 Apple 文档(URL Loading System Programming Guide),不推荐同步 NSURLRequest 方法,因为“因为它有严重的局限性”。似乎缺乏控制可接受的证书的能力是这些限制之一。

是的,您是对的,是 NSURLConnection 设置上的 delegate:self 导致调用您的委托(delegate)方法。因为简单(或简化)同步 sendSynchronousRequest: 调用不提供指定委托(delegate)的方式,所以不使用这些委托(delegate)方法。

关于Objective-C SSL同步连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2679944/

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