Я пытаюсь сделать запрос http DELETE с использованием NSURLSession, но он не работает полностью. Сервер удаляет ресурс, но метод NSURLSession dataTaskWithRequest: completeHandler: возвращает ошибку тайм-аута после ожидания указанного таймаута.Сделать запрос http DELETE с NSURLSession
Я не использую NSURLConnection, потому что он устарел.
Из методов NSURLSession, которые я использую, я выбрал dataTaskWithRequest, потому что он наиболее похож на метод, который я использую для http GET: dataTaskWithUrl: completeHandler. Методы, начинающиеся с «uploadTask» и «downloadTask», не кажутся подходящими для DELETE, но downloadTaskWithRequest: completeHandler: «работал» так же, как и метод 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];
}
Использование Почтальон, на DELETE возвращает вызов с 204 немедленно.
Я правильно использую NSURLSession для запроса на удаление?
Ошибка тайм-аута - это проблема с базой данных. Если вы не получите ответ или не попадете в блок отказов, мы никогда не будем там, где проблема! –