Cara membaca string sederhana dari permintaan POST di AFNetworking (Tanpa JSON)

Saya menggunakan AFNetworking untuk berkomunikasi dengan server melalui POST yang merespons dengan string sederhana yang berisi informasi yang saya perlukan. Saya menggunakan kode berikut:

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST: MY_URL
   parameters: MY_PARAMETERS
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
        //do something
      }
      failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        //etc.
      }];

Namun, tampaknya AFNetworking mengharapkan setiap respons dalam format JSON karena saya mendapatkan kesalahan ini saat menjalankan permintaan saya:

Error Domain=NSCocoaErrorDomain Code=3840 "Operasi tidak dapat diselesaikan. (Cocoa error 3840.)" (Teks JSON tidak dimulai dengan array atau objek dan opsi untuk mengizinkan fragmen tidak disetel.) UserInfo=0x1566eb00 {NSDebugDescription=teks JSON tidak dimulai dengan array atau objek dan opsi untuk mengizinkan fragmen tidak disetel.}

Bagaimana saya bisa memberi tahu AFNetworking bahwa tidak masalah jika responsnya bukan objek JSON? Saya pernah melihat sesuatu yang melibatkan AFHTTPClient, tapi sepertinya itu bukan bagian dari AFNetworking lagi.


person Haiku Oezu    schedule 09.01.2014    source sumber


Jawaban (3)


Anda dapat memberi tahu AFHTTPRequestOperationManager atau AFHTTPSessionManager cara menangani respons, mis. sebelum menelepon POST, Anda dapat melakukan hal berikut:

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

Kemudian di blok success Anda, Anda dapat mengonversi NSData menjadi string:

NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

Karena itu, Anda mungkin ingin mempertimbangkan untuk mengonversi layanan web Anda untuk mengembalikan respons JSON, karena jauh lebih mudah untuk menguraikannya (dan membedakan antara respons yang valid dan beberapa kesalahan server).

person Rob    schedule 09.01.2014
comment
Luar biasa, inilah yang saya butuhkan - person Haiku Oezu; 09.01.2014

  NSLog(@"Response: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);

Anda bisa mendapatkan detail deskripsi respons seperti di bawah ini

 NSLog(@"JSON: %@", [responseObject description]);
person codercat    schedule 09.01.2014

Cara yang jauh lebih baik adalah dengan membuat subkelas AFHTTPResponseSerializer dan menggantinya di sana

func responObject(untuk respon: URLResponse?, data: Data?, kesalahan: NSErrorPointer) -> Ada?

Di sana Anda dapat mengurai respons, memasukkan jenis yang Anda butuhkan, dan mengembalikannya.

person Timur Suleimanov    schedule 15.06.2018