CFNetwork 网络请求2

//

//  CFNetworkTest2.m

//  TestCF

//

//  Created by Jabez on 15/5/11.

//  Copyright (c) 2015年 John. All rights reserved.

//

#import "CFNetworkTest2.h"

#import <CoreFoundation/CoreFoundation.h>

#import <CFNetwork/CFNetwork.h>

@interface
CFNetworkTest2 ()

@property (nonatomic,
strong) NSMutableData *responseData;

@end

@implementation CFNetworkTest2

- (void)sendMessage

{

self.responseData = [NSMutableData
data];

[self
sendRequest];

}

- (void)sendRequest

{

CFStringRef url =
CFSTR("http://jabez.local/~jabez/test/response/response0");

CFURLRef myURL =
CFURLCreateWithString(kCFAllocatorDefault, url,
NULL);

CFStringRef requestMethod =
CFSTR("POST");

CFHTTPMessageRef myRequest =
CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, myURL,
kCFHTTPVersion1_1);

NSString *body =
@"key=cfnetworkTest2";

NSData *bodyData = [body
dataUsingEncoding:NSUTF8StringEncoding];

CFHTTPMessageSetBody(myRequest, (__bridge
CFDataRef)bodyData);

CFHTTPMessageSetHeaderFieldValue(myRequest,
CFSTR("key"),
CFSTR("headValue2"));

CFReadStreamRef requestReadStream =
CFReadStreamCreateForHTTPRequest(NULL, myRequest);

CFStreamClientContext clientContext =  {
0, (__bridge
void *)(self),
NULL, NULL,
NULL };

CFOptionFlags flags =
kCFStreamEventHasBytesAvailable |

kCFStreamEventEndEncountered |

kCFStreamEventErrorOccurred;

Boolean result = CFReadStreamSetClient(requestReadStream, flags,
myCFReadStreamClientCallback, &clientContext);

if (result) {

CFReadStreamScheduleWithRunLoop(requestReadStream,
CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

if (CFReadStreamOpen(requestReadStream)) {

CFRunLoopRun();

}
else {

CFReadStreamUnscheduleFromRunLoop(requestReadStream,
CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

}

}

CFRelease(myURL);

CFRelease(myRequest);

}

- (void)requestError

{

NSLog(@"request error");

}

- (void)finishRequestOK

{

NSString *responseString = [[NSString
alloc] initWithData:_responseData
encoding:NSUTF8StringEncoding];

NSLog(@"resposneString: %@", responseString);

}

- (void)appendBytes:(const
void *)bytes length:(NSUInteger)length

{

[_responseData
appendBytes:bytes
length:length];

}

static
void myCFReadStreamClientCallback(CFReadStreamRef stream,
CFStreamEventType type,
void *cientCallbackInfo) {

CFNetworkTest2 *delegate = (__bridge
CFNetworkTest2 *)cientCallbackInfo;

if (type ==
kCFStreamEventEndEncountered) {

[delegate
finishRequestOK];

} else
if (type ==
kCFStreamEventErrorOccurred) {

CFReadStreamUnscheduleFromRunLoop(stream,
CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

CFReadStreamClose(stream);

CFRelease(stream);

stream =
NULL;

[delegate
requestError];

} else
if (type ==
kCFStreamEventHasBytesAvailable) {

UInt8 buffer[1024];

CFIndex numBytesRead;

numBytesRead =
CFReadStreamRead(stream, buffer,
sizeof(buffer));

[delegate
appendBytes:buffer
length:numBytesRead];

}

}

@end

时间: 2024-12-14 08:53:33

CFNetwork 网络请求2的相关文章

CFNetwork 网络请求方式1

// // CFNetworkTest1.m // TestCF // // Created by Jabez on 15/5/11. // Copyright (c) 2015年 John. All rights reserved. // #import "CFNetworkTest1.h" @implementation CFNetworkTest1 - (void)sendMessage { [self magicHappens]; } - (void)magicHappens

网络请求相关小结2

1 NSURLConnettion NSURLConnettion是 Core Foundation/CFNetwork框架 API 之上的一个抽象. NSURLConnettion是用来指代 Foundation 框架中的一系列组件: NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage 以及同名类 NSURLConnection. 注1:原来的使用原理:一个

iOS开发之网络请求(一)ASIHTTPRequest

全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 基于底层的CFNetwork框架,运行效率很高 可惜作者早已停止更新,有一些潜在的BUG无人去解决 很多公司的旧项目里面都残留着它的身影,以前的很多iOS项目都是ASI + SBJson 会不会用ASI,可以算是检验是否为老牌iOS程序员的标准之一 ASI的github地址 https://github.com/pokeb/asi-http-request ASI的使用参考 http://www.cnblogs.com/d

iOS 网络请求NSURLSession

iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构. 现在已经有人在深入苹果的网络层基础架构的地方做研究了,所以我想是时候来分享一些对于我对于这些新的 API 的看法和心得了,新的 API 将如何影响我们编写程序,以及它们对于 API 设计理念的影响. NSURLConnection 作为 Core Foundation / CFNetwork 框架的 API 之上的一个抽象,在 2003 年,随着第一版的 S

iOS 开发指南 第15章 访问Web Service之使用轻量级网络请求架构MKNetworkKIt

除苹果提供的NSURLConnection和NSURLRequest外第三方的网络框架 1 安装和配置MKNetworkKit框架 下载并打开MKNetworkKit目录添加MKNetworkKit文件夹到新工程中-添加支持的类库或框架 CFNetwork.framework SystemConfiguration.framework Security.framework-添加预编译头文件 #ifndef MyNotes/MyNotes-Prefix.pch #define MyNotes/My

ios编程之网络请求

网络请求有GET请求和POST请求,get和post实现的时候可以选择同步或者异步实现.看一个请求是GET还是POST就看网址后面有没有携带请求体. GET与POST 区别 1.get请求 请求的网址全部明文显示 安全性不高 2.get请求 请求的网址 有字符数的限制 大概255个 3.post请求 请求的网址 不光是有一个请求的网址 还可以携带请求体 这个请求体 是以NSData形式存在 安全性较高 4.post请求没有字符数的限制 GET同步和GET异步 同步请求是在请求数据的时候不能做其他

Swift网络请求(Moya篇)

在使用Alamofire进行网络请求的时候,相信大部分的同学都会封装一个抽象的NetworkLayer,如"APIManager" 或者 "NetworkModel"等等.但是位置业务功能增加,会渐渐混合各种请求,不够清晰,而Moya能很好地解决这类问题.Moya在Alamofire基础上进行封装,是一个允许高度自定义的网络层,可以根据具体的需求进行接口的设置.具体的介绍可以参考Moya的官方链接,结构图如下: 接下来就介绍一下Moya的一些常见的用法: (一)根据

微信小程序 网络请求之re.request 和那些坑

微信小程序有四种网络请求类型,下面只详细介绍普通HTTPS请求(wx.request) 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downloadFile) WebSocket通信(wx.connectSocket) 首先,先确认是否设置了合法域名,或者在开发环境下不校验合法域名.关于设置合法域名请看→微信小程序 网络请求之设置合法域名   以下是wx.request的详细说明,截图于微信小程序开发文档 在微信index.js 发起一个普

Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所帮助. 首先按照惯例先来简单了解一些AsyncHttpClient网络框架的一些知识. 1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-a