IOS发送POST/GET请求


 在实际开发中,我们经常会需要一些网络请求的操作,现在也有一些很好的面向IOS开发的网络访问的API,比如ASIHttp......
今天在这里我只介绍apple官方的发送POST、GET请求的方法,后面陆续介绍有关ios请求WebService和WCF的操作,然后在介绍关于API的用法.闲话不多说了,直接开整:
POST/GET请求分有2种请求方法,一种是同步请求,一种是异步请求。
同步请求的方法:

NSString *urlstr=[[NSString alloc] initWithFormat:@"http://www.unipacshipping.com/Request/default.aspx?Name=Simple&Password=121212"];
    NSURL *url=[NSURL URLWithString:urlstr];
    NSURLRequest *request=[[NSURLRequest alloc] initWithURL:url];
    
    NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
    NSError *error=nil;
    NSURLResponse *response;
    NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    //NSLog(@"response data:%@",urlData);
    NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
    NSLog(@"response data:%@",data);
    
    [connection release];
    
    [request release];



同步请求很简单,就是上面的代码就能完成,但是在请求过程中,UI可能会造成卡顿,知道数据请求完毕之后,才会恢复操作,用户体验极差,一般不选取这种方法进行请求,而是异步请求(同步请求跟异步请求的区别,我这里就不做解释了),下面看看异步请求该如何操作:

首先在h文件中要继承NSURLConnectionDelegate这个委托方法
发起请求部分的代码依旧,只不过接收数据的部分有了变化,用这个Delegate里面的方法进行请求,代码如下:
#pragma --实现NSURLConnection委托方法
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSStringEncoding enc=CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    NSString *recdata=[[NSString alloc] initWithData:data encoding:enc];
    xmlString=recdata;
}
-(void) connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"%@",xmlString);
    if([xmlString isEqualToString:@"Success"])
    {
         NSLog(@"%@",xmlString );
    }
    NSXMLParser *ipPaser=[[NSXMLParser  alloc] initWithData:[xmlString dataUsingEncoding:NSUTF8StringEncoding]];
    //指定解析委托
    ipPaser.delegate=self;
    [ipPaser parse];
    [ipPaser release];
    [inActive stopAnimating];
}
这就是Get请求的异步获取数据的实现方法,完全避免了UI卡顿的造成。

下来看看POST请求的异步获取数据的方法。
其实POST请求异步获取数据的方法跟上面方法一样,也是通过委托来实现循环接收数据,直至数据接收完毕为止,只是发起请求部分不一样,下来看看这部分的代码:

//Post异步请求
    NSString *post = nil;
    post = [[NSString alloc] initWithFormat:@"hblno=QDA12110311&TypeID=0"];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    NSString *urlStr=[[NSString alloc] initWithFormat:@"http://www.unipacshipping.com/unipacService/unipac.wcfservice/postrequest.aspx"];
    NSURL *url=[NSURL URLWithString:urlStr];
    NSMutableURLRequest *request=[[NSMutableURLRequest alloc] initWithURL:url];
    [request setHTTPMethod:@"Post"];
    [request setHTTPBody:postData];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self];



解析xml文件的操作,这里先不做介绍,后面章节里面在说。


微信公众平台已开通,加个关注呗。我们一起学习,一起进步
微信号点击添加关注《IOS开发总汇》
百度知道群:开发者俱乐部


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值