1

我正在为 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 在重定向尝试后继续处理文件?

4

1 回答 1

0

大多数情况下,HTTP 重定向响应是当前连接的结束。如果您的第一个连接以重定向结束并且您拒绝处理重定向,则无需再做任何事情。

于 2013-10-19T04:45:12.587 回答