ios网络请求

复制代码
-(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 = [self sendRequestTo:[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两种方式的其实他们也是差不多的,不过写法不一样而已

第四种用的是一个开源的框架,要导的包有点多,要注意了哦~

ASIFormDataRequest,或ASIHTTPRequest,这两个东西不错的哦,我这次的项目就是用这个东西做的

ASIFormDataRequest:

这个要引入的包有:(明天补上)

复制代码
ASIFormDataRequest* req=[[ASIFormDataRequest alloc] init];
    NSString* s_url=@"url";
    req = [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:s_url]];
    [req setRequestMethod:@"POST"];//@"GET""POST"
    [req setDelegate:self];
    
    [req setPostValue:value forKey:key];
  .....
    
    
    [req startAsynchronous];
复制代码

结果返回时会自动调用以下方法

复制代码
- (void)requestFinished:(ASIHTTPRequest *)request
{
    int i = 0;
    //乱码的处理,呵
    NSString * temp = [[[NSString alloc]initWithData:[request responseData] encoding:NSUTF8StringEncoding]autorelease];
    NSArray * ttemp = [temp componentsSeparatedByString:@","];

 
}
复制代码


ASIHTTPRequest


ASIHTTPRequest是简单易用的,它封装了CFNetwork API。使得与Web服务器通信变得更简单。它是用Objective-C编写的,可以在MAC OS X和iPhone应用中使用。

它适用于执行基本的HTTP请求和互动(或者说是反馈)。ASIFormDataRequest子类可以简单的实现提交数据和文件。使用multipart/form-data

提供了以下:

一个从web服务器提交和获取数据的接口

直接下载数据到内存或者本地文件系统里

能够从本地提交文件,作为post数据的一部分。兼容HTML file input mechanism

可以访问和修改http请求和响应header

获得上传下载的进度信息

异步请求和队列,自动管理上传下载队列机制

cookie 支持

请求和响应的gzip支持

代理请求

 

ASIHTTPRequest设置

在iphone 项目中使用ASIHTTPRequest

1、添加一些必要的文件,复制以下文件到项目中去

ASIHTTPRquestConfig.h

ASInputStream.h

ASInputStream.m

ASIHTTPRequest.h

ASIHTTPRequest.h

ASINSStringAdditions.h

ASINSStringAdditions.m

ASIFormDataRequest.h

ASIFormDataRequest.m

ASINetworkQueue.h

ASINetworkQueue.m

iphone项目还必须包含以下文件

ASIAuthenticationDialog.h

ASIAuthenticationDialog.m

一个版本的Reachability类


添加必要的框架到项目中去

CFNetwork.framework

SystemConfiguration.framework

libz.1.2.3.dylib


配置Reachability

在iphone上,ASIHTTPRequest使用Apple的Reachability类。

Reachability有两个版本,他们都能在ASIHTTPRequest发行文件的Reachability文件夹中找到。

2.0版本是最新的办迸。如果你的项目是基于iphone os 3.x和更新的系统,你应该使用2.0版本的。包括.h和.m文件。保证在ASIHTTPRequestConfig.h文件中REACHABILITY_20_API的值为1

1.5是个老版本,它和iphone os 2.2.1-iphone os 3.0兼容。保证在ASIHTTPRequestConfig.h文件中REACHABILITY_20_API的值为0


在mac ox x项目中使用AHIHTTPRequest

为了在Mac os x项目中使用ASIHTTPRequest,你需要导入以下:

SystemConfiguration.framework + zlib

CoreService.framework

在Mac OS X上,CFNetwork 是CoreServices框架的一部分。除非你写的是基于控制台的应用程序


转自http://www.cnblogs.com/chiefCTO/archive/2012/03/30/2426103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值