iOS开发之网络编程篇二:Get,Post请求差异及用法
2016-04-13 01:50
801 查看
客户端向服务器发送请求,请求方式有两种:一种get请求,一种post请求。get请求是将信息直接拼接在URL后面,在真正开发中用到比较多;post请求是将一些比较重要的信息转化为二进制流。
在iOS下进行网络编程主要分为以下三步
客户端向服务器发送请求,请求方式有两种:一种get请求,一种post请求。 get请求是将信息直接拼接在URL后面,在真正开发中用到比较多。post请求是将一些比较重要的信息转化为二进制流。在真正开发中post请求常见于验证用户名密码是否正确,给服务器上传数据等。 注意不管是get请求还是post请求都是由后台决定的,程序员可以通过接口文档知道当前的请求方式是get还是post。请求方式不仅仅限于get和post,还有delete和put等,除了get请求可以使用NSUrlRequest之外,其他请求必须使用NSMutableURLRequset,明确的指定当前的HTTPMethod是什么请求。
和服务器建立连接
服务器做出响应
#pragma mark - get请求
// 1.URL
NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"];
// 2.封装请求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10];
// 3.发送请求
NSURLResponse *response = nil;
NSError *error = nil;
// 该方法在iOS9.0之后被废弃
// 下面的方法有3个参数,参数分别为NSURLRequest,NSURLResponse**,NSError**,后面两个参数之所以传地址进来是为了在执行该方法的时候在方法的内部修改参数的值。这种方法相当于让一个方法有了多个返回值
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
// 错误信息
if(error)
{
NSLog(@"%@", [error localizedDescription]);
// 此处需要解决iOS9.0之后,HTTP不能正常使用的问题,若不做任何处理,会打印“The resource could not be loaded because the App Transport Security policy requires the use of a secure connection” 错误信息。
}
NSError *newError = nil;
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&newError];
// 获取对应的数据信息
NSArray *array = dictionary[@"news"];
NSDictionary *dic = array[0];
NSLog(@"%@", dic[@"title"]);
iOS9之后http的适配方法(千万记得,不然你会一直纳闷链接是对的,为什么就是会崩或者没有数据):
post请求和get请求的区别在于,post会将请求参数以请求体的形式存储起来,在向服务器发送请求时,我们不会看到里面的具体参数,例如当我们填写私密表单,或者登录什么账号的时候,自然是不希望别人能看到我们的账号密码,所以这时候采用post请求更为安全。
#pragma mark - post请求
// 1.获取请求网址
NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?"];
// 2.封装请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10]; // post
// 设置请求方式
[request setHTTPMethod:@"POST"];
// 设置请求体(会把请求的数据转成data,达到用户信息保密的目的)
NSData *data = [@"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
// 3.发送请求
NSURLResponse *response = nil;
NSError *error = nil;
NSData *content = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSError *newError = nil;
// 获取数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:content options:NSJSONReadingMutableContainers error:&newError];
NSArray *array = dict[@"news"];
NSDictionary *dic = array[0];
NSLog(@"%@", dic[@"title"]);
以上两种请求所获取的数据一致,只是采用了不同的方式而已。
关于这节代码里面的细节,比如JSon数据的解析,这一块会在后面讲解里介绍,现在只需要知道它是一种数据结构,可以获取我们需要的数据。
文章转自:宏创学院 » iOS开发之网络编程篇二:Get,Post请求差异及用法
一、get请求
在iOS下进行网络编程主要分为以下三步客户端向服务器发送请求,请求方式有两种:一种get请求,一种post请求。 get请求是将信息直接拼接在URL后面,在真正开发中用到比较多。post请求是将一些比较重要的信息转化为二进制流。在真正开发中post请求常见于验证用户名密码是否正确,给服务器上传数据等。 注意不管是get请求还是post请求都是由后台决定的,程序员可以通过接口文档知道当前的请求方式是get还是post。请求方式不仅仅限于get和post,还有delete和put等,除了get请求可以使用NSUrlRequest之外,其他请求必须使用NSMutableURLRequset,明确的指定当前的HTTPMethod是什么请求。
和服务器建立连接
服务器做出响应
#pragma mark - get请求
// 1.URL
NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"];
// 2.封装请求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10];
// 3.发送请求
NSURLResponse *response = nil;
NSError *error = nil;
// 该方法在iOS9.0之后被废弃
// 下面的方法有3个参数,参数分别为NSURLRequest,NSURLResponse**,NSError**,后面两个参数之所以传地址进来是为了在执行该方法的时候在方法的内部修改参数的值。这种方法相当于让一个方法有了多个返回值
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
// 错误信息
if(error)
{
NSLog(@"%@", [error localizedDescription]);
// 此处需要解决iOS9.0之后,HTTP不能正常使用的问题,若不做任何处理,会打印“The resource could not be loaded because the App Transport Security policy requires the use of a secure connection” 错误信息。
}
NSError *newError = nil;
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&newError];
// 获取对应的数据信息
NSArray *array = dictionary[@"news"];
NSDictionary *dic = array[0];
NSLog(@"%@", dic[@"title"]);
iOS9之后http的适配方法(千万记得,不然你会一直纳闷链接是对的,为什么就是会崩或者没有数据):
二、post请求
post请求和get请求的区别在于,post会将请求参数以请求体的形式存储起来,在向服务器发送请求时,我们不会看到里面的具体参数,例如当我们填写私密表单,或者登录什么账号的时候,自然是不希望别人能看到我们的账号密码,所以这时候采用post请求更为安全。#pragma mark - post请求
// 1.获取请求网址
NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?"];
// 2.封装请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10]; // post
// 设置请求方式
[request setHTTPMethod:@"POST"];
// 设置请求体(会把请求的数据转成data,达到用户信息保密的目的)
NSData *data = [@"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
// 3.发送请求
NSURLResponse *response = nil;
NSError *error = nil;
NSData *content = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSError *newError = nil;
// 获取数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:content options:NSJSONReadingMutableContainers error:&newError];
NSArray *array = dict[@"news"];
NSDictionary *dic = array[0];
NSLog(@"%@", dic[@"title"]);
以上两种请求所获取的数据一致,只是采用了不同的方式而已。
三、总结
关于这节代码里面的细节,比如JSon数据的解析,这一块会在后面讲解里介绍,现在只需要知道它是一种数据结构,可以获取我们需要的数据。文章转自:宏创学院 » iOS开发之网络编程篇二:Get,Post请求差异及用法
相关文章推荐
- qperf测量网络带宽和延迟
- 安装完Android Studio出现Internal error. Please report to https://code.google.com/p/android/issues
- iOS开发之网络编程篇一:网络开发基本概念介绍
- Http会话cookie session
- VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
- VMware虚拟机网络详解(包括多网卡)
- 生产环境常见的HTTP状态码列表
- TCP协议疑难杂症全景解析
- HttpURLConnection请求返回数据乱码!
- HttpURLConnection(代码实现http请求)
- 网络营销团队怎么留住人才 企业文化建设很重要
- TCP 的那些事儿
- Muduo网络库源码分析(三)线程间使用eventfd通信和EventLoop::runInLoop系列函数
- IOS学习 网络NSURLSession JSON文件解析、本地服务器启动、MAC混编
- http authorization basic请求代码示例
- 用 Redis 轻松实现秒杀系统---双十一和12306的瞬时网络爆发访问
- http://kanglecjr.iteye.com/blog/1071199
- http://www.cnblogs.com/dolphin0520/p/3949310.html
- Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR
- Java Socket之网络相关API