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]);
}];

Jawaban:


136

Oke, temukan jawabannya dengan objek operasi

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

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.


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);
}

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


7

Saya bisa mendapatkan kode status dengan Swift 3:

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

0

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

manager.requestSerializer = [AFJSONRequestSerializer serializer];

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.