iOS 网络请求
来源:互联网 发布:.net 淘宝客源码下载 编辑:程序博客网 时间:2024/06/16 05:56
网络请求包括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>创建链接。
此时,创建的 代理为本类,所以该类必须继承协议
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>
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>
一、GET请求和POST请求简单说明
创建GET请求
1 // 1.设置请求路径2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];3 NSURL *url=[NSURL URLWithString:urlStr];4 5 // 2.创建请求对象6 NSURLRequest *request=[NSURLRequest requestWithURL:url];7 8 // 3.发送请求
服务器:
创建POST请求
1 // 1.设置请求路径 2 NSURL *URL=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/login"];//不需要传递参数 3 4 // 2.创建请求对象 5 NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:URL];//默认为get请求 6 request.timeoutInterval=5.0;//设置请求超时为5秒 7 request.HTTPMethod=@"POST";//设置请求方法 8 9 //设置请求体10 NSString *param=[NSString stringWithFormat:@"username=%@&pwd=%@",self.username.text,self.pwd.text];11 //把拼接后的字符串转换为data,设置请求体12 request.HTTPBody=[param dataUsingEncoding:NSUTF8StringEncoding];13 14 // 3.发送请求
服务器:
二、比较
建议:提交用户的隐私数据一定要使用POST请求
相对POST请求而言,GET请求的所有参数都直接暴露在URL中,请求的URL一般会记录在服务器的访问日志中,而服务器的访问日志是黑客攻击的重点对象之一
用户的隐私数据如登录密码,银行账号等。
三、使用
1.通过请求头告诉服务器,客户端的类型(可以通过修改,欺骗服务器)
1 // 1.设置请求路径 2 NSURL *URL=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/login"];//不需要传递参数 3 4 // 2.创建请求对象 5 NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:URL];//默认为get请求 6 request.timeoutInterval=5.0;//设置请求超时为5秒 7 request.HTTPMethod=@"POST";//设置请求方法 8 9 //设置请求体10 NSString *param=[NSString stringWithFormat:@"username=%@&pwd=%@",self.username.text,self.pwd.text];11 //把拼接后的字符串转换为data,设置请求体12 request.HTTPBody=[param dataUsingEncoding:NSUTF8StringEncoding];13 14 //客户端类型,只能写英文15 [request setValue:@"ios+android" forHTTPHeaderField:@"User-Agent"];
服务器:
2.加强对中文的处理
问题:URL不允许写中文
在GET请求中,相关代码段打断点以验证。
在字符串的拼接参数中,用户名使用“文顶顶”.
转换成URL之后整个变成了空值。
提示:URL里面不能包含中文。
解决:进行转码
1 // 1.设置请求路径2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];3 //转码4 urlStr= [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];5 NSURL *url=[NSURL URLWithString:urlStr];6 7 // 2.创建请求对象8 NSURLRequest *request=[NSURLRequest requestWithURL:url];
- ios网络请求
- iOS网络请求
- ios网络异步请求
- iOS网络请求
- IOS 异步 网络请求
- IOS 同步 网络请求
- iOS中的网络请求
- ios学习--网络请求
- iOS中的网络请求
- iOS 网络请求
- IOS-网络请求
- iOS网络数据请求
- ios 网络请求框架
- IOS网络请求
- iOS 网络请求
- iOS网络请求
- IOS网络请求
- IOS的网络请求
- WAS学习笔记之配置MySQL数据源
- POJ 3204 Ikki's Story I - Road Reconstruction 最大流关键边
- LUA简单迭代循环。
- int集合循环获取工具类
- class文件反编译总结
- iOS 网络请求
- 如何让旧版IE浏览器认识HTML5元素
- 图像处理----美白
- 有个pom.xml怎么用maven导入
- 传一路一带将设立1000亿元专项基金 三板块受益
- Java 单例模式 - Java
- 编译Boost 详细步骤 适用 VC6 VS2003 VS2005 VS2008 VS2010
- 数据加载到缓存
- Mac下的Apk多渠道验证工具