ios http请求

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

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值