2011-09-02 58 views
4

我想使用NSMutableRequest和NSURLConnection从服务器获取压缩文件。下面是我使用的代码:NSURLRequest/NSURLConnection ios 5.0 v/s早期版本

NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:downloadUrl 
                    cachePolicy:NSURLRequestReloadIgnoringCacheData 
                  timeoutInterval:30.0]; 


[newRequest setValue:@"Y29tLm5vbWFkZ......" forHTTPHeaderField:@"Authorization"]; 
NSURLConnection *connection = [NSURLConnection connectionWithRequest:newRequest delegate:self]; 
if (!connection) { 
     [self handleDownloadError]; 
} 

,我使用同样的NSURLConnectionDelegate方法

didReceiveResponse, didReceiveData, connectionDidFinishLoading, didFailWithError 

但是,当我运行的iOS 4.3的代码或更早版本我得到不同的响应(它下载压缩文件)和ios 5.0(返回一个JSON,声称“身份验证失败”。)。

ios 5.0为NSURLConnectionDelegate引入了许多新方法。但我不确定这是否是关于ios 5.0更改api的问题,或者是以不同方式处理相同请求的服务器代码。有谁知道可能是什么问题?

+2

没有人可以帮助你这个可以谈论它,因为iOS5仍然由NDA覆盖。你可能想尝试苹果开发者论坛。 –

+0

我不确定问题是由于ios 5的更改还是服务器问题。无论如何感谢 – Soni

+0

你需要检查你的模拟器在ios4.3和ios5上发送的HTTP头。如果它们相同,则服务器有责任停止以不同的方式对待设备。 – Nick

回答

3

iOS5改变了HTTP标头大小写的方式,至少从结尾删除空格。验证什么是您收到的实际HTTP标头通过打印,到控制台:

- (void)connection:(NSURLConnection *)aConnection 
    didReceiveResponse:(NSURLResponse *)aResponse 
{ 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)aResponse; 
    NSLog(@"Response headers :%@", [httpResponse allHeaderFields]); 
} 

顺便说一句你有没有注意到,那些您列出方法“通过的iOS 4.3可提供的iOS 2.0”标记为在苹果iOS Developer Library docs for NSURLConnection

+2

还有一个尚未记录的协议,您的委托应符合:NSURLConnectionDataDelegate。它在标题中但尚未记录。看起来他们已经完成了一半,将这种非正式协议转换成正式协议。所有相同的方法在那里,只是定义不同。 – bshirley

相关问题