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