说到IOS系统,相信大家都不陌生,这是我们苹果手机的系统,每个软件工程师都有义务保护用户数据的隐私和安全,今天这篇文章是武林技术频道小编为大家搜集的ios中http 和https 协议的访问异常的解决方法,希望对你学习有帮助!
ios中http 和https 协议的访问异常的解决方法
最近做个项目,开始采用的是HTTP协议实现客户端和服务器端的交互,后来需要改成HTTPS协议。
HTTP:
NSString *urlString =[NSString stringWithFormat:@"https://127.0.0.1/default.aspx?USER=%@",@"111"];NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];[request setURL:[NSURL URLWithString:urlString]];[request setHTTPMethod:@"GET"];NSHTTPURLResponse* urlResponse = nil;NSError *error = [[NSError alloc] init];NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];NSMutableString *result = [[NSMutableString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];NSLog(@"The result string is :%@",result);
HTTPS
事件触发
{ NSString *urlString =[NSString stringWithFormat:@"https://127.0.0.1/default.aspx?USER=%@",@"111"];NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5];//设置请求方式为get[request setHTTPMethod:@"GET"];//添加用户会话id[request addValue:@"text/html" forHTTPHeaderField:@"Content-Type"];//连接发送请求finished = false;NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];//堵塞线程,等待结束while(!finished) {[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];}} - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse*)response {}- (void)connectionDidFinishLoading:(NSURLConnection *)connection {//[_waitingDialog dismissWithClickedButtonIndex:0 animated:NO];[connection release];}-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ }- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection{return NO;}//下面两段是重点,要服务器端单项HTTPS 验证,iOS 客户端忽略证书验证。- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];} - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { NSLog(@"didReceiveAuthenticationChallenge %@ %zd", [[challenge protectionSpace] authenticationMethod], (ssize_t) [challenge previousFailureCount]);if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){[[challenge sender] useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];[[challenge sender] continueWithoutCredentialForAuthenticationChallenge: challenge];}} NSLog(@"get the whole response");//[receivedData setLength:0];}//处理数据 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ }
通过武林技术频道小编介绍的ios中http 和https 协议的访问异常的解决方法,相信大家都有了一定的了解,如需了解更多的相关资讯,请继续关注武林技术频道吧!
新闻热点
疑难解答