我有一个NSURLConnection连接到我已经创建的PHP API。 PHP API响应数据。由于它是一个动态应用程序,我这样做是为了告诉内容长度:
ob_start('scAPIHandler');
function scAPIHandler($buffer){
header('Content-Length: '.strlen($buffer));
return $buffer;
}
在API文件的开头,然后输出任何必要的内容。但是,当
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
函数触发,response.expectedContentLength
的值为-1。当我尝试不连接到我的PHP API,而是连接到Web上的某些图像时,会显示正确的预期内容长度。有什么方法可以让我的PHP API告诉NSURLResponse期望的内容长度?内容长度标题似乎不起作用。
提前致谢!
答案 0 :(得分:1)
好的,我已经明白了。我用了
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSDictionary *responseHeaders = ((NSHTTPURLResponse *)response).allHeaderFields;
NSLog(@"headers: %@", responseHeaders.description);
}
这个方法可以找出我的iOS应用程序正在接收的标题,并将它们与连接到同一URL时卷曲打印的标题进行比较。事实证明,卷曲显示的标题和Objective-C之间存在差异。不可否认,这让我大吃一惊,我不知道为什么会这样,但我找到了解决办法:
ob_start('scAPIHandler');
function scAPIHandler($buffer){
header('Custom-Content-Length: '.strlen($buffer));
return $buffer;
}
Custom-Content-Length确实出现在Objective-C中,我只是采用了自定义标题
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
self.expectedContentLength = response.expectedContentLength;
self.receivedData.length = 0;
NSDictionary *responseHeaders = ((NSHTTPURLResponse *)response).allHeaderFields;
if(self.expectedContentLength < 0){
// take my own header
NSString *actualContentLength = responseHeaders[@"Custom-Content-Length"];
if(actualContentLength && actualContentLength.length > 0){
self.expectedContentLength = actualContentLength.longLongValue;
}
}
}
并覆盖了预期的内容长度。