CFNetwrok網路請求3,cfnetwrok網路請求

來源:互聯網
上載者:User

CFNetwrok網路請求3,cfnetwrok網路請求

//

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

}


staticvoid 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 = [NSStringstringWithFormat:@"%@", (__bridgeNSString *) responseJson];

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

       CFRelease(responseJson);

       CFRelease(responseData);

    } elseif (type ==kCFStreamEventErrorOccurred) {

        CFReadStreamUnscheduleFromRunLoop(stream,CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

       CFReadStreamClose(stream);

       CFRelease(stream);

        stream =NULL;

    } elseif (type ==kCFStreamEventHasBytesAvailable) {

        CFTypeRef message =CFReadStreamCopyProperty(stream,kCFStreamPropertyHTTPResponseHeader);

       NSDictionary *httpHeaders =

        (__bridgeNSDictionary *)CFHTTPMessageCopyAllHeaderFields((CFHTTPMessageRef) message);

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

       CFRelease(message);

        

       UInt8 buffer[1024];

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

       CFHTTPMessageAppendBytes(response, buffer, length);

    }

}


@end


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.