如果从连接返回nil,为什么NSURLConnection会停止发送数据:willSendRequest:redirectResponse:

时间:2012-12-07 01:02:40

标签: ios nsurlconnection

我正在为NSURLConnection实现重定向处理程序。出于我的目的,我实际上并不想进行重定向,我想加载整个页面并记住重定向以供以后使用。在NSURLConnectionDataDelegate连接的文档中: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,程序正常加载页面。 (重定向的网址是原始网址,但是another question。如果它们相关,请杀死两只鸟并回答那个。)

在重定向尝试后是否还需要其他东西来正确允许NSURLConnection继续处理文件?

1 个答案:

答案 0 :(得分:0)

HTTP重定向响应是大多数时间当前连接的结束。如果您的第一个连接以重定向结束,并且您拒绝处理重定向,则无需执行任何操作。