我正在为 NSURLConnection 实现一个重定向处理程序。出于我的目的,我实际上并不想进行重定向,我想加载整个页面并记住重定向以供以后使用。在 NSURLConnectionDataDelegate 的 connection:willSendRequest:redirectResponse: 方法的文档中,我发现:
根据重定向响应使用的实际 URL 请求。代理可以返回未修改的请求以允许重定向、返回新请求或返回 nil 以拒绝重定向并继续处理连接。
我试过这段代码:
- (NSURLRequest *) connection: (NSURLConnection *) connection
willSendRequest: (NSURLRequest *) request
redirectResponse: (NSURLResponse *) redirectResponse
{
NSURL *url1 = [request URL];
NSURL *url2 = [redirectResponse URL];
if ([request URL] != nil)
self.redirect = [request URL];
return nil;
}
- (void) connection: (NSURLConnection *) theConnection didReceiveResponse: (NSURLResponse *) response {
NSURL *url1 = [response URL];
int foo = 0;
}
该程序从未调用过connection:didReceiveData:
,connection:didFailWithError:
或connectionDidFinishLoading:
. 返回request
而不是nil
,程序正常加载页面。(重定向的 URL 是原始 URL,但这是另一个问题。如果它们相关,请杀死两只鸟并回答那一只。)
是否需要其他东西才能正确允许 NSURLConnection 在重定向尝试后继续处理文件?