Objective-C 之同步请求、异步请求、GET请求、POST请求

本篇文章由:http://www.sollyu.com/objective-c-synchronization-requests-requests-for-asynchronous-requests-get-and-post-requests/

说明

1 同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,

2 异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行

3 GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;

4 POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。

同步GET请求

//第一步,创建URL
NSURL *url = [NSURL URLWithString:@"http://www.shiniv.com/test.php?type=get"];

//第二步,通过URL创建网络请求
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
//NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)
/*其中缓存协议是个枚举类型包含:
NSURLRequestUseProtocolCachePolicy(基础策略)
NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)
NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作)
NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载)
NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载)*/
//第三步,连接服务器
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSString *str = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);

同步POST请求

//第一步,创建URL
NSURL *url = [NSURL URLWithString:@"http://www.shiniv.com/test.php"];
//第二步,创建请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
[request setHTTPMethod:@"POST"];//设置请求方式为POST,默认为GET
NSString *str = @"type=focus-c";//设置参数
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
//第三步,连接服务器
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *str1 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
NSLog(@"%@",str1);

异步GET请求

//第一步,创建url
NSURL *url = [NSURL URLWithString:@"http://www.shiniv.com/test.php?type=get"];
//第二步,创建请求
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
//第三步,连接服务器
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];

异步POST请求

//第一步,创建url
NSURL *url = [NSURL URLWithString:@"http://www.shiniv.com/test.php"];
//第二步,创建请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
[request setHTTPMethod:@"POST"];
NSString *str = @"type=focus-c";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
//第三步,连接服务器
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];

异步请求的代理方法

//接收到服务器回应的时候调用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
    NSLog(@"%@",[res allHeaderFields]);
    self.receiveData = [NSMutableData data];

}
//接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.receiveData appendData:data];
}
//数据传完之后调用此方法
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *receiveStr = [[NSString alloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",receiveStr);
}
//网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
-(void)connection:(NSURLConnection *)connection
 didFailWithError:(NSError *)error
{
    NSLog(@"%@",[error localizedDescription]);
}
时间: 2024-10-09 22:08:48

Objective-C 之同步请求、异步请求、GET请求、POST请求的相关文章

HTTP请求中同步与异步有什么不同

普通的B/S模式就是同步,而AJAX技术就是异步,当然XMLHttpReques有同步的选项. 同步:提交请求->等待服务器处理->处理完毕返回.这个期间客户端浏览器不能干任何事. 异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕. 举个生动的例子吧: 同步就是你叫我去吃饭,我听到了就和你去吃饭:如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭. 异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭.豪享博娱乐

UI13-GET POST 同步,异步-代理 Block请求方式。

http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213 http://project.lanou3g.com/teacher/yihuiyun/lanouproject/activitylist.php 两个接

同步和异步请求

// //  ViewController.m //  UI-NO-18 // //  Created by Bruce on 15/8/13. //  Copyright (c) 2015年 Bruce. All rights reserved. // #import "ViewController.h" #import "InfoModel.h" @interface ViewController () @end @implementation ViewCont

iOS中的请求(GET请求,POST请求,同步请求,异步请求)

1.用到的一些第三方 PostTableViewController.m #import "PostTableViewController.h" @interface PostTableViewController () @property(nonatomic,retain) NSArray *dataArr; @end @implementation PostTableViewController - (void)viewDidLoad { [super viewDidLoad];

[IOS_HTTP]NSURLConnection同步与异步请求

今天看到<WIN32多线程程序设计>的同步控制时,才发现原来自己对同步和异步的概念很模糊,甚至混淆.于是GOOGLE了一下.下面都是高人们的见解,简单明了. 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式.  异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式. 举个不太恰当的例子,就像:  SendMessage(...)  TRACE0("just  like  send");   PostMessage(...) 

关于jquery同步和异步请求问题总结

关于jquery同步和异步请求问题总结 问题 这几天做项目的时候,写脚本遇到一个问题,就是jquery异步请求和同步请求执行顺序不按代码顺序执行而是最后执行导致添加数据报错,添加到空值,这怎么忍,于是我去查找jquery api,终于知道了原来jquery默认异步请求,防止数据卡死,终于让我找到了这货 async,当async: true 时,ajax请求是异步的.当async : true 时,就是同步的,但是我又有个问题,怎么设置,这个在哪设置,用$.ajax去写这个操作,不,不太麻烦了,到

iOS上的http请求:get、post以及同步、异步

1.get: view sourceprint? 01.<span style="font-size:14px;">NSString * URLString = @"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getSupportCityDataset?theRegionCode=广东"; 02.NSURL * URL = [NSURL URLWithString:[URLStri

js中请求数据的$post和$ajax区别(同步和异步问题)

$.post和$.Ajax都为页面上向后台发送请求,请求数据 1.post 因为post默认为异步请求,可是有时候我们会发现,本来要求请求马上出现,可是异步会导致后面突然再执行,这样就出很多问题 2.Ajax 最原始的Ajax,可以控制同步或者异步,属性:async设置为false,代表同步:async设置为true,代表异步 语法如下: $.ajax({ type : "post", url : "register/RegisterState", data : &

iOS网络编程之同步、异步、请求队列 2014-12-7

1. 同步意为着线程阻塞,在主线程中使用此方法会不响应任何用户事件.所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替. - (IBAction)grabURL:(id)sender { NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request star

ASIHTTP 框架,同步、 异步请求、 上传 、 下载

ASIHTTPRequest详解 ASIHTTPRequest 是一款极其强劲的 HTTP 访问开源项目.让简单的 API 完成复杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度跟踪,上传文件,HTTP 认证.在新的版本中,还加入了 Objective-C 闭包 Block 的支持,让我们的代码加轻简灵活. 下面就举例说明它的 API 用法. 发起一个同步请求 同步意为着线程阻塞,在主线程中使用此方法会使应用Hang住而不响应任何用户事件.所以,在应用程序设计时,大多被用在