1. 同步发送
 
- (NSString *)sendRequestSync
{
    // 初始化请求, 这里是变长的, 方便扩展
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
 
    // 设置
    [request setURL:[NSURL URLWithString:urlStr]];
    [request setHTTPMethod:@"POST"];
    [request setValue:host forHTTPHeaderField:@"Host"];
    NSString *contentLength = [NSString stringWithFormat:@"%d", [content length]];
    [request setValue:contentLength forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:content];
 
    // 发送同步请求, data就是返回的数据
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nilerror:&error];
    if (data == nil) {
        NSLog(@"send request failed: %@", error);
        return nil;
    }
 
    NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"response: %@", response);
    return response;
}
 
2.异步发送
 
1) 使用delegate的方式:
 
- (void)sendRequestAsync
{
   // 初始化请求
    NSMutableURLRequest  *request = [[NSMutableURLRequest alloc] init];
 
    // 设置
    [request setURL:[NSURL URLWithString:urlStr]];
    [request setCachePolicy:NSURLRequestUseProtocolCachePolicy]; // 设置缓存策略
    [request setTimeoutInterval:5.0]; // 设置超时
 
    //......
 
    receivedData = [[NSMutableData alloc] initData: nil];
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request     delegate:self];

    if (connection == nil) {
        // 创建失败
        return;
    }

}
 
异步发送使用代理的方式, 需要实现以下delegate接口:
 
// 收到回应
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{    
    NSLog(@"receive the response");
   // 注意这里将NSURLResponse对象转换成NSHTTPURLResponse对象才能去
   NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
   if ([response respondsToSelector:@selector(allHeaderFields)]) {
       NSDictionary *dictionary = [httpResponse allHeaderFields];
       NSLog(@"allHeaderFields: %@",dictionary);
   }
   [receivedData setLength:0];
}    
 
// 接收数据   
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data    
{
    NSLog(@"get some data");
    [receivedData appendData:data];    
}
 
// 数据接收完毕
- (void)connectionDidFinishLoading:(NSURLConnection *)connection    
{
    NSString *results = [[NSString alloc]
                        initWithBytes:[receivedData bytes]
                        length:[receivedData length]
                        encoding:NSUTF8StringEncoding];
   NSLog(@"connectionDidFinishLoading: %@",results);

}
 
// 返回错误
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error    
{   
    NSLog(@"Connection failed: %@", error);        
}    

2) iOS 5.0版本新增异步发送接口:
+ (void)sendAsynchronousRequest:(NSURLRequest *)request
                         queue:(NSOperationQueue*) queue
             completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*)) handlerNS_AVAILABLE(10_7, 5_0);

转载于:https://www.cnblogs.com/zhwl/archive/2013/01/25/2876473.html

iOS使用NSURLConnection发送同步和异步HTTP Request相关推荐

  1. iOS网络编程之同步、异步、请求队列

    1. 同步意为着线程阻塞,在主线程中使用此方法会不响应任何用户事件.所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替. - (IBAction)grabURL:(id)se ...

  2. ios开发网络学习:一:NSURLConnection发送GET,POST请求

    #import "ViewController.h"@interface ViewController ()<NSURLConnectionDataDelegate> ...

  3. iOS网络--同步,异步下载数据

    一. 这一节我们来学习几种下载数据的方式,目的在于学习同步,异步下载数据的知识. 二. 1.直接同步下载数据 //直接下载 同步下载 阻塞主线程 NSURL * url = [NSURL URLWit ...

  4. iOS网络开发中的同步、异步和请求队列

    在iOS网络编程中,我们经常会遇到线程的同步和异步问题,同时为了对异步请求更加精准丰富的控制,我们还常常在iOS中使用请求队列,下面就来谈谈iOS开发中同步.异步以及请求队列的使用方法. 1. 同步意 ...

  5. kafka之Producer同步与异步消息发送及事务幂等性案例应用实战

    本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark商业应用实战指导,请持续关注本套博客.版权声明:本套Spark商业应用实战归作者(秦凯新)所有,禁止转载,欢迎学习. 秦凯新的技术社区 ...

  6. 利用Spring框架封装的JavaMail现实同步或异步邮件发送

    利用Spring框架封装的JavaMail现实同步或异步邮件发送 作者:张纪豪 J2EE简单地讲是在JDK上扩展了各类应用的标准规范,邮件处理便是其中一个重要的应用.它既然是规范,那么我们就可以通过J ...

  7. ajax发送异步请求与ajax发送同步请求

    async (默认: true) 默认设置下,所有请求均为异步请求.如果需要发送同步请求,请将此选项设置为 false.注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行. ajax发 ...

  8. Kafka生产者——消息发送流程,同步、异步发送API

    生产者消息发送流程 发送原理 Kafka的Producer发送消息采用的是异步发送的方式. 在消息发送的过程中,涉及到了两个线程:main线程和Sender线程,以及一个线程共享变量:RecordAc ...

  9. ajax发送请求-同步和异步

    2019独角兽企业重金招聘Python工程师标准>>> function ajaxTest(){ var loginId="will"; var url=&quo ...

最新文章

  1. Java语言程序设计(基础篇)第八章(2 19 36)
  2. python学习费用-深圳python学习费用
  3. 如何在SharePoint Server中整合其他应用系统?
  4. 二级c语言上机编程技巧,二级C语言上机编程题技巧总结
  5. Reactive Cocoa实践举例
  6. 历史上的今天:编程语言中null引用的十亿美元错误
  7. c语言中void arrout,c语言学习笔记(数组、函数
  8. 描述一下Spring Bean 的生命周期
  9. Pair Project:电梯控制程序 编写心得 最新版
  10. Go语言【第十四篇】:Go语言基础总结
  11. Codeforces Round #168 (Div. 2)
  12. springboot+vue全栈开发_全栈的自我修养: 002使用@vue/cli进行vue环境搭建 (使用Vue,SpringBoot,Flask完成前后端分离)...
  13. spring-第十七篇之spring AOP基于注解的零配置方式
  14. 物联网技术的基站能耗监控解决方案
  15. 算法导论 9.1-1 “给出算法,在给定的比较次数(n+向上取整(lgn)-2)内,一定能找出第二小的元素。提示:也找出最小元素。”...
  16. python曲线拟合预测_数据预测与曲线拟合
  17. 彩扩机项目--NPN和PNP三极管作为开关管的区别
  18. STM32F103C8T6的TIM1的CH1、CH2、CH3三路互补PWM实现四路PWM两两输出
  19. 【游戏设计模式】之三 状态模式、有限状态机
  20. STRATEGY模式(冒泡算法为例)

热门文章

  1. Java面试常考的面试题整理
  2. 远程办公的一天:魔幻24小时
  3. Linux文件分割命令split笔记
  4. 教你理清SpringBoot与SpringMVC的关系
  5. 动图演示23个鲜为人知的VSCode快捷键
  6. This is a Blog Test
  7. sh变量特性(3)默认特性
  8. 开启AngularJS 1.X的学习之路(1)
  9. RabbitMQ学习3----运行和管理RabbitMQ
  10. spring定时任务的配置使用