AFHTTPClient'ten hata bloğundaki http durum kodunu almanın kolay bir yolu var mı?


94

Değiştirebileceğim, kabul edilen http durum kodlarının bir listesi olduğunu görüyorum, ancak hata bloğunda http durum kodunu alabilirsem daha temiz olacağını düşünüyorum.

Tamam, cevabı işlem nesnesiyle buldum

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
        NSLog(@"error code %d",[operation.response statusCode]);
}];

Yanıtlar:


136

Tamam, cevabı işlem nesnesiyle buldum

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
       NSLog(@"error code %d",[operation.response statusCode]);
}];

Bu da yardımcı olabilir[operation.request HTTPMethod]
defvol

2
Bunun eski olduğunu biliyorum, ancak @wilhelmbot - HTTPMethod size GET / POST / PUT gibi bir şey verir, muhtemelen yanıt durumunu kontrol etmek için yararlı değildir.
shortstuffsushi 08

111

AFNetworking'in daha yeni sürümlerinde, yanıt nesnesini hatadan alabilirsiniz:

[[[error userInfo] objectForKey:AFNetworkingOperationFailingURLResponseErrorKey] statusCode]

Hattın daha ilerisinde hata işleme yapıyorsanız ve yanıt nesnesinin etrafından geçmek istemiyorsanız bu kullanışlıdır.


Önce temeldeki hatayı almanız gerekebilir. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato

19

AFNetworking 3.0 için şunu kullanın:

failure:^(NSURLSessionTask *operation, NSError *error) {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)operation.response;
    httpResponse.statusCode;
    NSLog(@"status code: %li", (long)httpResponse.statusCode);
}

13

NSInteger operationStatusCode = [işlem.hata kodu];

NSInteger httpStatusCode = operation.response.statusCode;

İstekler iptal edilmişse / ulaşılamazsa / zaman aşımına uğramışsa httpStatusCodeher zaman olacaktır 0.

Alternatif olarak, sorunu anlayarak da tanımlayabilirsiniz operationStatusCode. Bu bir NSErrorNesnedir.

  • İsteği işlemek için / zaman aşımına / ağa ulaşamıyorsa, operationStatusCodeolacaktır -1009.
  • İşlem kuyruğunu iptal ederseniz, operationStatusCodeolacaktır -999.

Diğer tüm NSErrorkodları ve açıklamalarını Apple'ın belgelerinde kontrol edebilirsiniz.


7

Swift 3 ile durum kodunu alabildim:

((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
    as! HTTPURLResponse).statusCode

0

Benim için çalışıyor Talebinize aşağıdaki satıra ekleyin

manager.requestSerializer = [AFJSONRequestSerializer serileştirici];

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.