iOS 正確接收 HTTP chunked 數據的方法

jopen 9年前發布 | 21K 次閱讀 IOS iOS開發 移動開發

iOS 上的 NSURLConnection 一般能處理絕大部分的 HTTP 請求場景, 不過, 對于一種情況, 它無法處理, 那便是接收 HTTP chunked data. NSURLConnectionDataDelegate 有一個方法, 可以在讀取到部分響應時進行回調, 但是, 數據不是按 HTTP chunked data 來接收的, 它會將多個 chunk 合并到一起.

@protocol NSURLConnectionDataDelegate- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
@end

沒辦法, 只能使用 cURL for iOS, 在 iComet 的 iOS 例子 里有介紹.

首先, 下載 cURL for iOS: http://seiryu.home.comcast.net/~seiryu/libcurl-ios.html

然后, 把里面的 libcurl.a 引入你的項目, 還要把它的頭文件引入. 注意, cURL 依賴 libz.dylib.

完整代碼:

#include "curl/curl.h"
@interface ViewController (){
    CURL _curl;
}
@end
// this function is called in a separated thread,
// it gets called when receive msg from icomet server
size_t icomet_callback(char ptr, size_t size, size_t nmemb, void userdata){
    const size_t sizeInBytes = sizenmemb;
    NSData data = [[NSData alloc] initWithBytes:ptr length:sizeInBytes];
    NSString s = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    NSLog(@"%@", s);
    // beware of multi-thread issue
    return sizeInBytes;
}
@implementation ViewController

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!