代码之家  ›  专栏  ›  技术社区  ›  Akusete

NSURLConnection成功,没有HTTP响应

  •  0
  • Akusete  · 技术社区  · 16 年前

    给我猜个谜: NSURL连接 对象发出多个连续(非并发)https请求。在95%的时间里一切都很好,但是每隔一段时间(大约50-100个请求)我就会遇到委托方法

    - (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 URLWithString@"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 {
    }
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Akusete    16 年前

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

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

    我将请求发送到的URL确实发出了一个重定向,但这也不能解释为什么HTTP请求在其他~95%的时间内都有效。

    我希望这对将来有类似问题的人有所帮助。