ASIHTTPRequest访问https[error-9844]解决方法

来源:互联网 发布:android 7.0 java 编辑:程序博客网 时间:2024/06/05 20:46

iOS终端请求服务端数据时,为了保证数据安全,我们一般会使用https协议加密,而对于iOS的网络编程,我们一般会使用开源框架:ASIHTTPRequest,但是如果使用传统的http方式,即使忽略验证的话,程序也会报[error-9844]的错误,具体错误如下描述:

Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo=0x6aafa30 {NSUnderlyingError=0x6a3fd90 "The operation couldn’t be completed. (OSStatus error -9844.)", NSLocalizedDescription=A connection failure occurred}

那么该如何解决该问题呢?经过查找解决方案如下:

解决方案1

1)[requestsetValidatesSecureCertificate:NO];

2)ASIHTTPRequest.m文件中查找”https”,sslProperties字典中增加kCFStreamSSLLevel对象,网上的参考方法:

[sslPropertiessetObject:(NSString*)(CFStringRef*)kCFStreamSocketSecurityLevelSSLv3forKey:(NSString*)kCFStreamSSLLevel];

但是,sslProperties字典并非可变字典,所以你需要将sslProperties修改为可变字典NSMutableDictionary

解决方案2

如果需要更加灵活的对SSL security level进行设置,可以将CFStringRef*sslSecurityLevel作为变量提到ASIHTTPRequest.h文件的property中,具体操作如下:

1)ASIHTTPRequest.h的文件中添加声明:

CFStringRef*sslSecurityLevel;

2)ASIHTTPRequest.h的文件中添加CFStringRef属性:

@property(assign)CFStringRef*sslSecurityLevel;

3)ASIHTTPRequest.m的文件中添加CFStringRef属性:

@synthesizesslSecurityLevel;

4)ASIHTTPRequest.m的文件修改:

NSDictionary*sslProperties = [[NSDictionaryalloc]initWithObjectsAndKeys:??,将不可变字典更改为可变字典(NSMutableDictionary),即:

NSMutableDictionary*sslProperties = [[NSMutableDictionaryalloc]initWithObjectsAndKeys:??

5)4)修改语句结束的地方添加设置SSL security level的代码:

// Use requested SSL security level

if([selfsslSecurityLevel] !=nil) {

[sslPropertiessetObject:(NSString*)[selfsslSecurityLevel]forKey:(NSString*)kCFStreamSSLLevel];

}

6)在调用请求的request中做如下设置:

[requestsetValidatesSecureCertificate:NO];

[requestsetSslSecurityLevel:(CFStringRef*)kCFStreamSocketSecurityLevelSSLv3];




转自:http://mmz06.blog.163.com/blog/static/12141696201211752931454/

原创粉丝点击