码迷,mamicode.com
首页 > Web开发 > 详细

CFNetwork 网络请求2

时间:2015-05-12 06:57:35      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:mac   ios   

//

//  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


CFNetwork 网络请求2

标签:mac   ios   

原文地址:http://blog.csdn.net/jabezlee/article/details/45663701

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!