ios http请求

来源:互联网 发布:淘宝店排名怎么靠前 编辑:程序博客网 时间:2024/06/06 12:50
ios网络请求

今天在公司开始着手做了一个项目,要和网络接号对接的,有以下一点点小心得,上来分享一下:

首先说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:[NSURLURLWithString: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两种方式的其实他们也是差不多的,不过写法不一样而已