2016-09-15 6 views
0

NSURLSessionを使用してhttp DELETEリクエストを作成しようとしていますが、完全には機能しません。サーバーはリソースを削除しますが、NSURLSessionメソッドのdataTaskWithRequest:completionHandler:は指定されたタイムアウトを待ってからタイムアウトエラーを返します。NSURLSessionでhttp DELETEリクエストを作成します。

NSURLConnectionは非推奨であるため、使用しません。

使用するNSURLSessionメソッドのうち、http GET:dataTaskWithUrl:completionHandlerで使用するメソッドと最も似ているため、dataTaskWithRequestを選択しました。 "uploadTask"と "downloadTask"で始まるメソッドはDELETEでは適切ではないようですが、上記のdataTaskメソッドと同じ方法でdownloadTaskWithRequest:completionHandler: 'worked'サーバーはリソースを削除しましたが、メソッドはタイムアウトエラーを返しました。

+(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のエラーではありません。つまり、リクエストが実際にタイムアウトしたことを意味します。これは、バックエンドにエラーがあることを意味します(サーバーに到達していない可能性があります)。

さらに、サードパーティ製のフレームワークを使用してHTTPリクエストを送信すると、これらの問題がさらに簡単にデバッグできます。 AFNetworkingは本当に良いものです。

+0

要求はサーバーに到達し、サーバーはリソースを削除します。 – crisphoney

関連する問題