2010-07-08 83 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%的時間內工作。

我希望這可以幫助未來有類似問題的人。