一、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数据的解析,这一块会在后面讲解里介绍,现在只需要知道它是一种数据结构,可以获取我们需要的数据。