2010-07-08 84 views
0

谜语我:我使用的是NSURLConnection的iPhone模拟器SDK 3.1.2对象上发出多个连续的(不兼)HTTPS请求。一切正常,95%的时间,但每隔一段时间(也许50-100左右的请求)我得到其中的委托方法NSURLConnection的成功,没有HTTP响应

- (void)connectionDidFinishLoading:(NSURLConnection *)connection; 

被称为后局势[连接开始],但没有任何电话代表方法

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 

我已将问题简化为下面的来​​源。据我所知,这打破了NSURLConnection定义行为的契约。有没有其他人有这个问题,这是一个已知的错误,或者我使用NSURLConnection错误?

static BOOL hasSeenResponse = NO; 

    //Create a NSURLConnection and start it 
-(void) begin { 
    NSURL* url = [NSURL [email protected]"https://some.domain.com/some/path/?some=query"]; 
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever]; 
    NSURLRequest* request = [NSURLRequest requestWithURL:url]; 
    if ([NSURLConnection canHandleRequest:request]) { 
     NSURLConnection* connection = [[NSURLConnection connectionWithRequest:request delegate:self] retain]; 
     hasSeenResponse = NO; 
     [connection start]; 
    } 
}  

#pragma mark NSURLConnection Delegate Methods 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    if (!hasSeenResponse) { 
     NSLog(@"\n\nNo Response Recieved\n"); 
    } 
    [connection release]; 
    [self begin]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    [connection release]; 
    [self begin]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    hasSeenResponse = YES; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
} 

回答

0

我能够通过添加委托来解决这个问题重新定向总是接受

-(NSURLRequest *)connection:(NSURLConnection *)connection 
      willSendRequest:(NSURLRequest *)request 
      redirectResponse:(NSURLResponse *)redirectResponse 
{ 
    return request; 
} 

据我了解,这是默认的行为所以我不知道为什么这解决了这个问题。

我发送请求到的URL确实发出了重定向,但这也不能解释为什么HTTP请求在另外95%的时间内工作。

我希望这可以帮助未来有类似问题的人。