网络请求包括GET.POST两种方式,其步骤为:1>获取URL。 2>获取请求。 3>创建链接。 4>返回数据(代理)。
1>获取URL。
NSString *urlStr=@"http://api.zbw.vc/api/vip/GetPhonePadTagMsg";
//当参数为中文时,用UTF8编码
//urlStr=[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:urlStr];
2>获取请求。
NSURLRequest *request=[NSURLRequest requestWithURL:url];
默认get方法的参数只需要URL拼接。
当创建post方法的时候,对request进行如下操作
<span style="font-size:18px;">NSString *dataStr=[NSString stringWithFormat:@"UserName=%@&LoginPwd=%@",self.QQField.text,self.pwdField.text];
NSData *data=[dataStr dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
[request setHTTPMethod:@"POST"];
[request setTimeoutInterval:5.0];</span>
3>创建链接。
此时,创建的 代理为本类,所以该类必须继承协议<NSURLConnectionDataDelegate>
NSURLConnection *conn=[NSURLConnection connectionWithRequest:request delegate:self];
4>返回数据(代理)。实现代理必须实现如下方法
<span style="font-size:18px;">//网络返回数据开始
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
//重复调用,返回数据处理
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
//返回数据结束
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
//发生错误处理方法
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error</span>
IOS提供另一种方法实现数据回传
1.同步>>
NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&resp error:&error];
2.异步>>
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(block)];
具体代码如下:
<span style="color:#333333;">#import "CSZViewController.h"
@interface CSZViewController ()
@property (nonatomic,strong) NSMutableData *mutableData;
@end
@implementation CSZViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (NSURLRequest *)getRequest {
NSString *urlStr=@"http://api.zbw.vc/api/vip/GetPhonePadTagMsg";
//当参数为中文时,用UTF8编码
//urlStr=[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:urlStr];
NSURLRequest *request=[NSURLRequest requestWithURL:url];
return request;
}
- (IBAction)getLogin {
NSURLRequest *request = [self getRequest];
NSURLConnection *conn=[NSURLConnection connectionWithRequest:request delegate:self];
[conn start];
}
- (NSMutableURLRequest *)getAsyncRequest {
NSString *urlStr=@"http://api.zbw.vc/api/Vip/PostUserInfo";
NSURL *url=[NSURL URLWithString:urlStr];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
NSString *dataStr=[NSString stringWithFormat:@"UserName=%@&LoginPwd=%@",self.QQField.text,self.pwdField.text];
NSData *data=[dataStr dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
[request setHTTPMethod:@"POST"];
[request setTimeoutInterval:5.0];
return request;
}
- (IBAction)postLogin {
[UIApplication sharedApplication].networkActivityIndicatorVisible=YES;
NSMutableURLRequest *request = [self getAsyncRequest];
NSURLConnection *conn=[NSURLConnection connectionWithRequest:request delegate:self];
[conn start];
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"%@",@"网络返回数据开始");
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
if (_mutableData==nil) {
_mutableData=[NSMutableData data];
}
[_mutableData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
_mutableData=nil;
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *str=[[NSString alloc] initWithData:_mutableData encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
if (_mutableData!=nil) {
_mutableData=nil;
}
[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;
}
- (IBAction)clickSync {
NSURLRequest *request = [self getRequest];
NSURLResponse *resp=nil;
NSError *error=nil;
NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&resp error:&error];
if (error!=nil) {
NSLog(@"%@",error.localizedDescription);
return;
}
if (data!=nil) {
//解码
NSString *respStr=[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",respStr);
}
else
{
NSLog(@"获取不到网络数据");
}
}
- (IBAction)clickAsync {
NSURLRequest *request = [self getAsyncRequest];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (connectionError!=nil) {
NSLog(@"%@",connectionError.localizedDescription);
}else if (response!=nil) {
//解码
NSString *res=[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",res);
}else{
NSLog(@"获取不到网络数据");
}
}];
}
@end</span>
分享到:
相关推荐
网络请求封装,创建一个网络数据工具,来处理项目中的所有网络请求数据
网络请求管理库,基于对AFNetwork的封装 支持httpRequest,chainRequest,batchRequest 用法请看 demo
一个简单的网络请求
一 、使用方法设置 1、不需要下拉刷新也不需要上拉加载 ...1、网络请求失败 [self endRefreshFailure]; 2、网络请求成功 2、1 有下一页数据 [self endRefresh:YES]; 2、2无下一页数据 [self endRefresh:NO];
网络请求工具,基本AF 3.0 和YYcache 写的网络缓存工具,支持HTTPS双向认证或者 单向认证! 网络状态等等 写的不太好,还请大家多包含
ios-swift网络图片轮播-Alamofire请求-SwiftyJSON解析
基于AFNetworking,使用代理方式对网络请求再封装,可实现网络请求自动取消。 1、该网络请求封装是基于AFNetworking 3.0 以上版本的,所以在使用该请求封装时,项目需要引入AFNetworking网络库3.0 以上版本; ...
iOS数据的网络请求
iOS--ASI第三方网络请求框架,使用把文件导入项目,并在头文件中引用
RxSwift函数式响应编程思想,RxSwift-KVO、Button、UITextField、ScrollView、手势、通知、定时器、网络请求的使用-Demo
各类请求有分带缓存 , 不带缓存, 可自定义, 默认请求头和解析头等几种方式 Git: https://github.com/zhouxihi/NVNetworking
AF带缓存的网络请求无网络自动加载
本来是想在GitHub找一个符合自己App的网络请求库,结果就是要么不支持缓存或者不支持RESTful API 请求, 又或者带缓存的又不支持过滤某一些参数字段(否则无法得到缓存),带着这样的需求之下就有了 “HJNetwork” 这...
我传了两次,发现都下载不了,最后附上github地址:https://github.com/15997082670/ZBRequests
使用YTKNetwork为网络请求增加统一的参数,并与当前请求接口所传参数一同转化为json格式上传到服务器
WZXNetworking(麻烦给个星star) 封装网络请求(AFNetworking 3.0.4版本) https://github.com/WuZhuoXuan/WZXNetworking
最近很多人问一些基于AFNetworking3.0网络请求的封装,其实不用真的不用封装,唯一需要封装的地方就是客户端做缓存,统一把所有请求做了缓存接口。缓存用的是YYCache。基于AFNetworking的demo
Github :https://github.com/GREENBANYAN/NSNetworkManager 简书: http://www.jianshu.com/p/fb3999bb037a
包括网络请求、文件上传、文件下载这三个方法。并且支持RESTful API GET、POST、PUT、DELETE、PATCH的请求。同时使用YYCache做了强大的缓存策略。 拥有 AFNetwork 大部分常用功能,包括网络状态监听等,提供类方法...
今年8月份写的请求类,刚开始是基于 NSURLConnect 封装,近期废弃了所有 NSURLConnect 相关的 API, 全面基于 NSURLSession 用法和 AFNetworking 查不多,也有 两个 block 进行请求结果的回调.