我为这个冗长的问题提前道歉。 我在自签名的SSL证书上遇到了麻烦,我想logging迄今为止我尝试过的所有内容。 我正在开发一个与REST服务进行通信的应用程序。 testing服务器使用一个自签名的SSL证书,我可以在我的电脑上安装而不会出现问题。 这是一个需要安装密码的.p12文件。 没有安装这个证书,所有到服务器的请求返回一个403。 .p12将三个项目安装在“根证书颁发机构”,“根证书颁发机构”颁发的“testing用户”证书以及与“testing用户”证书关联的私钥中。 我通过给自己发送.p12文件在我的iPad上安装了这个证书。 我点击附件,input密码,现在我可以访问Safari中的网站。 不幸的是,由于应用程序沙箱,这是不足以让我的应用程序与REST服务进行通信。 我使用ASIHTTPRequest进行与来自我的应用程序的REST服务的所有通信。 每个请求都是ASIHTTPRequest的一个子类。 我发现我必须做的第一件事就是调用[self setValidatesSecureCertificate:NO]; 所以它甚至会尝试到服务器的SSL连接。 如果这就是我所做的,我会从服务中获得403个错误代码。 现在我似乎无法弄清楚如何获得使用证书的请求。 我已经尝试导出这三个项目作为单独的.cer文件,包括他们在项目中,并添加到请求使用下面的代码: NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"]]; SecCertificateRef cert = SecCertificateCreateWithData(NULL, (CFDataRef)data); … [self setClientCertificates:[NSArray arrayWithObjects:(id)cert, …, nil]]; 虽然代码执行没有问题使用这种方法,我仍然得到403错误。 我甚至尝试在我的应用程序中包含.p12文件,并使用相同的代码导入它。 这因SecCertificateCreateWithData返回nil而失败。 我承认我真的不知道我在这里做什么。 这一切都在我的头上,任何人都可以给我的帮助将不胜感激。
我在许多项目中使用ASIhttprequest ,但最近与每个新的项目,当我试图添加ASIhttprequest类我只是在我试图导入它们之前使用类之前,我得到以下错误: 用configurationDebugbuild立项目finjan的finjan Ld build/Debug-iphonesimulator/finjan.app/finjan normal i386 cd /Users/Apple/Desktop/application/finjan setenv MACOSX_DEPLOYMENT_TARGET 10.5 setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk -L/Users/Apple/Desktop/application/finjan/build/Debug-iphonesimulator -F/Users/Apple/Desktop/application/finjan/build/Debug-iphonesimulator -filelist /Users/Apple/Desktop/application/finjan/build/finjan.build/Debug-iphonesimulator/finjan.build/Objects-normal/i386/finjan.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework CoreGraphics -framework AudioToolbox -framework AVFoundation -o /Users/Apple/Desktop/application/finjan/build/Debug-iphonesimulator/finjan.app/finjan Undefined symbols: "_CFHTTPAuthenticationIsValid", referenced from: -[ASIHTTPRequest attemptToApplyProxyCredentialsAndResume] in ASIHTTPRequest.o -[ASIHTTPRequest attemptToApplyCredentialsAndResume] in ASIHTTPRequest.o "_CFHTTPMessageApplyCredentialDictionary", referenced from: -[ASIHTTPRequest applyAuthorizationHeader] […]
我正在重新思考我正在开发的一个大型应用程序的请求架构的方法。 我目前正在使用ASIHTTPRequest来实际发出请求,但由于我在不同的视图控制器中采取了许多不同的操作,因此我需要许多不同types的请求,所以我正在尝试制定组织这些请求的最佳系统。 我目前正在构build由应用程序委托保留的单身“请求者”,并围绕收听需要发出请求的NSNotifications进行聆听。 他们提出请求,收听响应,并发送一个新的NSNotification与响应数据。 这解决了我的大部分问题,但并不优雅地处理失败的请求或同时请求到同一个单身人士请求。 任何人都有成功的devise一个清晰的面向对象的架构,用于在iOS应用程序中进行多种不同types的请求?
由于ASIHTTPRequest最近停止了工作 ,似乎关注正在转向AFNetworking 。 但是,我还没有find比较两个库的function,所以我不知道如果/当我切换时可能会丢失什么。 我目前发现的主要差异是: AFNetworking有一个小得多的代码(这是很好的) AFNetworking正在迅速改进(所以它可能还不成熟,可能没有一个稳定的API呢?) 两者都似乎有caching,但我已经看到提示,因为AFNetworking使用NSURLConnection它不会caching对象超过50K ASIHTTPRequest对手动和自动(PAC)http代理有很好的支持; 我找不到AFNetworking代理服务器支持的级别 AFNetworking要求iOS 4+,而ASIHTTPRequest则适用于iOS 2(对我来说不是一个问题,但这对某些人来说是一个问题) AFNetworking还没有内置的持久caching,但有一个持久的caching有一个挂起的请求: https : //github.com/gowalla/AFNetworking/pull/25 有没有人看到两个库的任何好的比较或任何logging从一个切换到另一个的经验?
在启用ARC的代码中,如何在使用基于块的API时解决有关潜在保留周期的警告? 警告: Capturing 'request' strongly in this block is likely to lead to a retain cycle 由这段代码产生: ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:… [request setCompletionBlock:^{ NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserialize:request.rawResponseData error:nil]; // … }]; 警告与在块内使用对象request相关联。