pyr*_*nic 10 nsurlconnection asihttprequest chunked-encoding ios
我已经检查了与此相关的其他问题,但唯一的答案是"使用ASIHTTPRequest
",因为这已经不再开发了我想问一下人们正在使用什么替代方案,而在我们的SDK上工作时我遇到了很多奇怪的行为NSURLConnection
从服务器接收数据时.
我们追踪到的事实是,NSURLConnection
它不能很好地处理分块编码中的响应.或者至少我们在这里阅读NSURLConnection和"chunked"转移编码这个问题
我们正在谈论的一些开发人员说它在iOS 5中变得更好,我们需要确保我们的SDK至少与iOS 4.3向后兼容.
我想确认这是一个问题NSURLConnection
,以及人们如何处理它.
到目前为止,我发现的所有替代方案都是基于NSURLConnection
并且我假设因此具有相同的缺陷.ASIHTTPRequest
事实上确实有效,因为它的基础略低于NSURLConnection
,但正在寻找不再支持的知识替代品.
其他的库列表看着是:
Restkit
,
ShareKit
,
LRResty
,
AFNetworking
,
TTURLRequest
我知道这里有类似的问题RESTKit是ASIHTTPRequest的一个很好的替代品吗?这里ASIHTTPRequest替代方案但这两个解决方案都基于NSURLConnection.
编辑:我注意到我在帖子的开头指出了错误的问题,所以更新了.它指向了2008年的一个主题,我看到了类似的但没有最新的.
Car*_*rdo 19
NSURLConnection支持分块传输.我用它们.
定义一些道具:
Run Code Online (Sandbox Code Playgroud)NSMutableData * responseData; NSURLConnection * connection;
建立连接
Run Code Online (Sandbox Code Playgroud)NSURL *url = [NSURL URLWithString:@"...."]; self.responseData = [[NSMutableData alloc] initWithLength:0] ; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
注册建立连接的回调方法
Run Code Online (Sandbox Code Playgroud)- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { // You may have received an HTTP 200 here, or not... [responseData setLength:0]; }
注册"chunk received"的回调方法
Run Code Online (Sandbox Code Playgroud)- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSString* aStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; NSLog(@"This is my first chunk %@", aStr); }
注册您的"连接完成"回调:
Run Code Online (Sandbox Code Playgroud)- (void)connectionDidFinishLoading:(NSURLConnection *)connection { [connection release]; }
最后,注册你"连接失败"回调:
Run Code Online (Sandbox Code Playgroud)- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"Something went wrong..."); }
只是为了下一个到达这里的人,并且仍然无法使用NSURLConnection来处理块编码数据.
NSURLConnection将使用分块编码,但具有未公开的内部行为,以便在打开连接之前缓冲前512个字节,并通过响应头中的IF Content-Type提供任何内容为"text/html"或"application /"八位字节流".这至少与iOS7有关.
但是,如果Content-Type设置为"text/json",它不会缓冲响应.因此,无论是谁都无法获得分块编码的NSURLConnection响应(即不调用回调)应检查响应头并将其在服务器上更改为"text/json",如果它不以其他方式破坏应用程序行为.
归档时间: |
|
查看次数: |
6442 次 |
最近记录: |