apakah ada cara mudah untuk mendapatkan kode status http di blok kegagalan dari AFHTTPClient?

94

Saya melihat bahwa ada daftar kode status http yang diterima yang dapat saya modifikasi, tetapi saya pikir akan lebih bersih jika saya bisa mendapatkan kode status http di blok kegagalan ..

Oke, temukan jawabannya dengan objek operasi

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

Jawaban:

136

Oke, temukan jawabannya dengan objek operasi

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
       NSLog(@"error code %d",[operation.response statusCode]);
}];
MonkeyBonkey
sumber
Ini mungkin juga membantu[operation.request HTTPMethod]
defvol
2
Saya tahu ini sudah lama, tetapi @wilhelmbot - HTTPMethod akan memberi Anda sesuatu seperti GET / POST / PUT ... dll, mungkin tidak berguna untuk memeriksa status tanggapan.
shortstuffsushi
111

Di versi AFNetworking yang lebih baru, Anda dapat mengambil objek respons dari kesalahan:

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

Ini berguna jika Anda melakukan penanganan kesalahan lebih jauh ke atas dan tidak ingin meneruskan objek respons.

Sam
sumber
Anda mungkin perlu mendapatkan kesalahan yang mendasarinya terlebih dahulu. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato
19

Untuk AFNetworking 3.0 , gunakan

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

NSInteger operationStatusCode = [kode operasi.error];

NSInteger httpStatusCode = operation.response.statusCode;

Jika permintaan dibatalkan / tidak dapat dijangkau / batas waktu, httpStatusCodeakan selalu 0.

Cara lainnya, Anda dapat mengidentifikasi masalah dengan memahami operationStatusCode. Itu adalah sebuah NSErrorObjek.

  • Jika tidak dapat mencapai / batas waktu / tidak ada jaringan untuk memproses permintaan, operationStatusCodeakan -1009.
  • Jika Anda membatalkan antrian operasi, itu operationStatusCodeakan -999.

Anda dapat memeriksa semua NSErrorkode lain dan deskripsinya di dokumentasi Apple

c0deslayer
sumber
7

Saya bisa mendapatkan kode status dengan Swift 3:

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

Ini bekerja untuk saya Tambahkan baris di bawah ini ke permintaan Anda

manager.requestSerializer = [AFJSONRequestSerializer serializer];


sumber