今天在公司开始着手做了一个项目,要和网络接号对接的,有以下一点点小心得,上来分享一下:
首先说ios的网络请求,方式有很多种,我把它分了两种,一种是外框架型,一种是内框架;前都是应用了官方API以外的框架,后者则是相对;
-(void)testRequest { NSLog(@"test request..."); NSString *postUrl = @"url"; NSMutableDictionary *dlist = [[NSMutableDictionary alloc] init]; [dlist setObject:@"value" forKey:@"key"]; .... NSString *jsonStrPost = [self sendRequestTo:[NSURL URLWithString:postUrl] usingVerb:@"POST" withParameters:dlist]; NSLog(@"do post: jsonStrPost = %@", jsonStrPost); }
上面用的就是有点像json的做法,ios的,呵!
下面再说另一种做法:
//quest /** * url:请求地址 * verb:请求方式 * parameters:请求参数 */ -(NSString *)sendRequestTo:(NSURL *)url usingVerb:(NSString *)verb withParameters:(NSDictionary *)parameters{ NSString *jsonStr = nil; NSData *body = nil; NSMutableString *params = nil; NSString *contentType = @"text/html; charset=utf-8"; NSURL *finalURL = url; if(nil != parameters){ params = [[NSMutableString alloc] init]; for(id key in parameters){ NSString *encodedkey = [key stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; CFStringRef value = (__bridge CFStringRef)[[parameters objectForKey:key] copy]; CFStringRef encodedValue = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, value,NULL,(CFStringRef)@";/?:@&=+$", kCFStringEncodingUTF8); [params appendFormat:@"%@=%@&", encodedkey, encodedValue]; CFRelease(value); CFRelease(encodedValue); } [params deleteCharactersInRange:NSMakeRange([params length] - 1, 1)]; } // if([verb isEqualToString:@"POST"]){ contentType = @"application/x-www-form-urlencoded; charset=utf-8"; body = [params dataUsingEncoding:NSUTF8StringEncoding]; }else{ if(nil != parameters){ NSString *urlWithParams = [[url absoluteString] stringByAppendingFormat:@"?%@", params]; finalURL = [NSURL URLWithString:urlWithParams]; } } NSMutableDictionary *headers = [[NSMutableDictionary alloc] init]; [headers setValue:contentType forKey:@"Content-Type"]; [headers setValue:@"text/html" forKey:@"Accept"]; [headers setValue:@"no-cache" forKey:@"Cache-Control"]; [headers setValue:@"no-cache" forKey:@"Pragma"]; [headers setValue:@"close" forKey:@"Connection"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:finalURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; [request setHTTPMethod:verb]; [request setAllHTTPHeaderFields:headers]; if(nil != parameters){ [request setHTTPBody:body]; } params = nil; // NSURLResponse *response; NSError *error = nil; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; if(error){ NSLog(@"something is wrong: %@", [error description]); }else{ if(responseData){ jsonStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; } } return jsonStr; }
NSString *jsonStrPost = [selfsendRequestTo:[NSURL URLWithString:postUrl] usingVerb:@"POST"withParameters:dlist];
下面是第三种了~有什么疑问可以留言,偶会常看博客的了!
NSString *requestString = [NSString stringWithFormat:@"url"]; // 数据内容转换为UTF8编码,第二个参数为数据长度 // NSData *requestData = [NSData dataWithBytes:[requestString UTF8String] length:[requestString length]]; // 请求的URL地址 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:requestString]]; NSLog(@"%@\n",requestString); // 设置请求方式 //[request setHTTPMethod:@"get"]; // 设置请求内容 //[request setHTTPBody:requestData]; // 设置请求头声明 [request setValue:@"text/xml" forHTTPHeaderField:@"Content-type"]; // 执行请求 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; // 输出返回数据 NSString *returnString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@", returnString);
上面三种方法都有POST和GET两种方式的其实他们也是差不多的,不过写法不一样而已