网络基础
来源:互联网 发布:淘宝卖家查看店铺粉丝 编辑:程序博客网 时间:2024/04/27 07:36
一:网络请求之GET vs POST
有两种方法把数据提交给服务器:GET和POST
1.GET:
1> GET的语义是获取指定URL上的资源
2>将数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,各个变量之间使用“&”连接
3>不安全,因为在传输过程中,数据被放在请求的URL中
4>传输的数据量小,这主要是因为受URL长度限制
2.POST:
1> POST的语意是对指定资源“追加/添加”数据
2>将数据放在数据体中,按照变量和值相对应的方式,传递到action所指向URL
3>所有数据对用户来说不可见
4>可以传输大量数据,上传文件只能使用Post
二:网络访问的四个步骤:
第一步:确定地址-URL
第二步:建立请求
第三步:建立并启动连接
等待网络处理中...
第四步:连接完成,处理结果
三:IOS网络处理常用类
1. NSURL(地址)
请求地址
2. NSURLRequest(请求,GET请求使用)
保存需要传送给Web服务器的全部数据:
一个NSURL对象
缓存策略
等待Web服务器响应的最长时间
请求头
请求体
3. NSMutableURLRequest(可变请求,POST请求使用)
NSURLRequest的可修改子类
4. NSURLConnection(连接)
负责创建客户端和Web服务器之间的网络连接、发送NSURLRequest对象中的数据并收集来自服务器的响应
四:NSURLConnectionDataDelegate的常用代理方法
之所以使用代理方法,是因为要处理请求返回的结果!
// 服务器开始返回数据
- (void)connection:didReceiveResponse:
// 收到服务器返回的数据,本方法会被调用多次
- (void)connection:didReceiveData:
// 数据接收完毕,做数据的最后处理
- (void)connectionDidFinishLoading:
// 网络连接错误
- (void)connection:didFailWithError:
// 发送数据给服务器,POST请求使用此方法
- (void)connection:didSendBodyData:totalBytesWritten: totalBytesExpectedToWrite:
五:GET请求步骤——地址->请求->连接
//定义URL
NSString *urlStr = @"http://xxx.com/login.php?username=123&password=123";
NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
//定义Request
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//定义Connection
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
//启动Connection
[conn start];
六:POST请求步骤(定义/启动Connection部分省略)
//定义URL
NSString *urlStr = @"http://xxx.com/login.php";
//定义Request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 等待服务器响应的最长时间
[request setTimeoutInterval:5.0];
// 设置请求方法,大小写无关
[request setHTTPMethod:@"post"];
NSString *bodyString = [NSString stringWithFormat:@"username=%@&password=%@",_userNameText.text,_passwordText.text];
// 生成请求体数据并编码
NSData *body = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
// 设置HTTP请求数据体
[request setHTTPBody:body];
七:GET & POST请求演练
1.GET
#warning - 1.GET请求操作代码
// 定义URL
NSString *urlStr = [NSStringstringWithFormat:@"%@?username=%@&password=%@",LOGIN_URL, _userNameText.text,_passwordText.text];
// 注意:网络请求的URL,需要编码才可以使用!!!
NSURL *url = [NSURLURLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
// 定义请求
NSURLRequest*request = [NSURLRequestrequestWithURL:url];
// 定义连接
NSURLConnection*conn = [[NSURLConnectionalloc]initWithRequest:requestdelegate:self];
// 开始访问
[connstart];
#warning - 2.获得服务器数据的准备工作
@interfaceViewController :UIViewController <NSURLConnectionDataDelegate>
@interfaceViewController ()
{
//接收返回数据方法会被调用多次,需要定义成员变量记录接收到的数据
NSMutableData *_receivedData;
}
- (IBAction)getLogin:(id)sender
{
//初始化接收数据
_receivedData = [NSMutableDatadata];
……
}
#warning - 3.通过NSURLConnectionDataDelegate代理方法接收数据
//收到服务器返回数据,本方法会被调用多次
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
NSLog(@"收到服务器返回数据%@",data);
[_receivedDataappendData:data];
}
//数据接收结束
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
{
NSString*string = [[NSString alloc]initWithData:_receivedDataencoding:NSUTF8StringEncoding];
NSLog(@"接收完毕,返回内容为:%@",string);
//释放数据
_receivedData =nil;
}
// 网络连接错误
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
//取消对URL的编码即可发生错误。
NSLog(@"网络连接错误:%@", error.localizedDescription);
}
2.POST
#warning - 1.POST请求操作代码
// 初始化接收数据
_receivedData = [NSMutableDatadata];
// 定义URL,字母及数字组成的url不需要编码
NSURL *url = [NSURLURLWithString:LOGIN_URL];
// 定义请求
NSMutableURLRequest*request = [NSMutableURLRequestrequestWithURL:url];
// 等待服务器响应的最长时间
[request setTimeoutInterval:5.0];
// 设置请求方法,大小写无关
[request setHTTPMethod:@"post"];
NSString *bodyString = [NSStringstringWithFormat:@”username=%@&password=%@",_userNameText.text,_passwordText.text];
// 生成请求体数据并编码
NSData*body = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
// 设置HTTP请求数据体,NSMutableURLRequest会自动在请求头中加入Content-Length
[requestsetHTTPBody:body];
// 定义连接
……
#warning - 2.NSURLConnectionDataDelegate代理方法
// 发送数据给服务器,POST请求(上传操作)会使用此方法
- (void)connection:(NSURLConnection*)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
{
NSLog(@“发送数据给服务器bytesWritten:%d,totalBytesWritten %dtotalBytesExpectedToWrite %d”, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);
}
其他方法无需做任何更改!
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- 网络基础
- NYOJ 520 & HDU 2136 Largest prime factor(筛法思想)
- ORA-19815: WARNING: db_recovery_file_dest_size of 2147483648 bytes is 98.85% used
- rails开发流程
- iOS提交发布应用(Xcode5)到App Store 详细解析
- 一维DFT
- 网络基础
- 第十二周 求数的阶乘(递归算法)
- MongoDB 开篇
- JavaWeb——Day20_1
- HDU 4734F(x) 题解 (记忆化DP)
- ubuntu12.04 the system is running in low-graphics mode的解决方案
- [PAT]1004. Counting Leaves (30)
- IOS 7 下面 状态栏的字体改成白色
- Scala——基础篇