CFNetwrok网络请求3

//

//  CFNetworkTest3.m

//  TestCF

//

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

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

//


#import "CFNetworkTest3.h"


@implementation CFNetworkTest3


// good

- (void)sendMessage

{

    [self request];

}


- (void)request

{

    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);

    NSData *bodyData = [@"key=test3" dataUsingEncoding:NSUTF8StringEncoding];

    CFHTTPMessageSetBody(myRequest, (__bridge CFDataRef)bodyData);

    

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

    

    CFReadStreamRef requestReadStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, myRequest);

    CFHTTPMessageRef response = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, false);

    CFStreamClientContext clientConetext = { 0, response, NULL, NULL, NULL};

    CFOptionFlags flags = kCFStreamEventHasBytesAvailable | kCFStreamEventEndEncountered | kCFStreamEventErrorOccurred;

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

    if (result) {

        CFReadStreamScheduleWithRunLoop(requestReadStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

        if (CFReadStreamOpen(requestReadStream)) {

            CFRunLoopRun();

        } else {

            CFReadStreamUnscheduleFromRunLoop(requestReadStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

        }

    }

    CFRelease(myURL);

    CFRelease(myRequest);

}


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

    CFHTTPMessageRef response =  (CFHTTPMessageRef)clientCallBackInfo;

    if (type == kCFStreamEventEndEncountered) {

        CFIndex statusCode = CFHTTPMessageGetResponseStatusCode(response);

        NSLog(@"status Code: %li", statusCode);

        CFDataRef responseData = CFHTTPMessageCopyBody(response);

        

        CFIndex count = CFDataGetLength(responseData);

        CFStringRef responseJson = CFStringCreateWithBytes(kCFAllocatorDefault, CFDataGetBytePtr(responseData), count, kCFStringEncodingUTF8, YES);

        NSString *jsongString = [NSString stringWithFormat:@"%@", (__bridge NSString *) responseJson];

        NSLog(@"jsongString: %@", jsongString);

        CFRelease(responseJson);

        CFRelease(responseData);

    } else if (type == kCFStreamEventErrorOccurred) {

        CFReadStreamUnscheduleFromRunLoop(stream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

        CFReadStreamClose(stream);

        CFRelease(stream);

        stream = NULL;

    } else if (type == kCFStreamEventHasBytesAvailable) {

        CFTypeRef message = CFReadStreamCopyProperty(stream, kCFStreamPropertyHTTPResponseHeader);

        NSDictionary *httpHeaders =

        (__bridge NSDictionary *)CFHTTPMessageCopyAllHeaderFields((CFHTTPMessageRef) message);

        NSLog(@"dict: %@", httpHeaders);

        CFRelease(message);

        

        UInt8 buffer[1024];

        CFIndex length = CFReadStreamRead(stream, buffer, sizeof(buffer));

        CFHTTPMessageAppendBytes(response, buffer, length);

    }

}


@end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值