2016-09-15 2 views
0

NSURLSession을 사용하여 http DELETE 요청을하려고하는데 완전히 작동하지 않습니다. 서버가 리소스를 삭제하지만 NSURLSession 메서드 인 dataTaskWithRequest : completionHandler :는 지정된 시간이 초과 될 때까지 시간 초과 오류를 반환합니다.NSURLSession을 사용하여 http DELETE 요청을 만듭니다.

NSURLConnection은 사용되지 않으므로 사용하지 않을 예정입니다.

사용할 NSURLSession 메서드 중 내가 가장 많이 사용하는 http GET : dataTaskWithUrl : completionHandler 메서드와 유사하기 때문에 dataTaskWithRequest를 선택했습니다. "uploadTask"및 "downloadTask"로 시작하는 메서드는 DELETE에는 적합하지 않지만 downloadTaskWithRequest : completionHandler : 위의 dataTask 메서드와 동일한 방식으로 '작업 됨'. 서버가 자원을 삭제했지만 메소드가 시간 초과 오류를 반환했습니다.

+(void)httpDelete: (NSString*)url completionHandler: (void(^)(id, NSError*))complete 
{ 
    NSURLSessionConfiguration *urlSessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 

    NSMutableDictionary* dictionaryAdditionalHeaders = [[NSMutableDictionary alloc] init]; 

    NSString* stringBearerToken = @"..."; 
    NSString* stringApiKey = @"..."; 

    [dictionaryAdditionalHeaders setObject:stringBearerToken forKey:@"Authorization"]; 
    [dictionaryAdditionalHeaders setObject:stringApiKey forKey:@"x-api-key"]; 
    [dictionaryAdditionalHeaders setObject:@"application/json" forKey:@"Content-Type"]; 
    [dictionaryAdditionalHeaders setObject:@0 forKey:@"Content-Length"]; 

    [urlSessionConfiguration setHTTPAdditionalHeaders: dictionaryAdditionalHeaders]; 

    NSURLSession *urlSession = [NSURLSession sessionWithConfiguration: urlSessionConfiguration delegate:nil delegateQueue:[NSOperationQueue mainQueue]]; 

    NSMutableURLRequest* mutableUrlRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5]; 
    [mutableUrlRequest setHTTPMethod: @"DELETE"]; 

    [[urlSession dataTaskWithRequest:mutableUrlRequest completionHandler: ^(NSData *data, NSURLResponse* response, NSError* error) 
    { 
     if(error != nil) 
     { 
      complete(response, error); 
     } 
     else 
     { 
      complete(response, nil); 
     } 
    }] resume]; 
} 

우편 배달부, 즉시 204로 DELETE 호출이 반환을 사용 : 여기

는 코드입니다.

삭제 요청을 위해 NSURLSession을 올바르게 사용하고 있습니까?

+0

타임 아웃 오류는 백엔드 문제입니다. 응답을 얻지 않거나 실패 블록을 치지 않으면 문제가 발생한 곳이 없습니다! –

답변

0

아마존 API 게이트웨이는 204 응답을 가진 Content-Length 헤더를 잘못 보냅니다. 그들은 this AWS forum에 따라 2016 년 3 월 21 일 백스 로그에이 문제를 추가했습니다. NSMutableURLRequest의 제한 시간 간격을 300 초로 늘리면 dataTaskWithRequest 메서드가 시간 초과가 아닌 실제 응답으로 반환됩니다.

0

이것은 NSURLSession과 관련된 오류가 아닙니다. 요청이 실제로 시간이 초과되었음을 의미합니다. 즉, 백엔드에 오류가 있다는 뜻입니다 (서버에 도달하지 못했을 수도 있습니다).

또한 이러한 문제는 제 3 자 프레임 워크를 사용하여 디버깅하기가 훨씬 쉬워졌습니다. AFNetworking은 정말 좋은 것입니다.

+0

요청이 서버에 도달하고 서버가 자원을 삭제합니다. – crisphoney

관련 문제