NSURLRequest / NSURLConnection ios 5.0 v / s早期版本

时间:2011-09-02 10:10:18

标签: objective-c ios nsurlconnection ios5

我正在尝试使用NSMutableRequest和NSURLConnection从服务器获取压缩文件。这是我正在使用的代码:

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的问题,或者是以不同方式处理相同请求的服务器代码。有谁知道可能是什么问题?

1 个答案:

答案 0 :(得分:3)

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

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

顺便说一下,您是否注意到您列出的那些方法在Apple iOS Developer Library docs for NSURLConnection标记为“在iOS 2.0到iOS 4.3中可用”?