มีวิธีง่ายๆในการรับรหัสสถานะ http ในบล็อกความล้มเหลวจาก AFHTTPClient หรือไม่


94

ฉันเห็นว่ามีรายการรหัสสถานะ http ที่ยอมรับซึ่งฉันสามารถแก้ไขได้ แต่ฉันคิดว่ามันจะดีกว่าถ้าฉันได้รับรหัสสถานะ http ในบล็อกความล้มเหลว ..

ตกลงพบคำตอบด้วยวัตถุการดำเนินการ

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

คำตอบ:


136

ตกลงพบคำตอบด้วยวัตถุการดำเนินการ

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

สิ่งนี้อาจเป็นประโยชน์เช่นกัน[operation.request HTTPMethod]
defvol

2
ฉันรู้ว่ามันเก่า แต่ @wilhelmbot - HTTPMethod จะให้บางอย่างเช่น GET / POST / PUT ... ฯลฯ อาจไม่เป็นประโยชน์ในการตรวจสอบสถานะการตอบกลับ
shortstuffsushi

111

ใน AFNetworking เวอร์ชันใหม่กว่าคุณสามารถดึงอ็อบเจ็กต์ตอบกลับจากข้อผิดพลาด:

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

สิ่งนี้มีประโยชน์หากคุณทำข้อผิดพลาดในการจัดการต่อไปในบรรทัดและไม่ต้องการส่งผ่านวัตถุตอบกลับ


คุณอาจต้องได้รับข้อผิดพลาดพื้นฐานก่อน NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato

19

สำหรับ AFNetworking 3.0ให้ใช้

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

13

NSInteger operationStatusCode = [รหัส operation.error];

NSInteger httpStatusCode = operation.response.statusCode;

หากคำขอถูกยกเลิก / ไม่สามารถเข้าถึง / หมดเวลาจะถูกเสมอhttpStatusCode0

หรือคุณสามารถระบุปัญหาได้โดยทำความเข้าใจกับไฟล์operationStatusCode. มันเป็นNSErrorวัตถุ

  • ถ้ามันไม่สามารถเข้าถึง / หมดเวลา / เครือข่ายการร้องขอไม่ผ่านกระบวนการที่จะoperationStatusCode-1009
  • หากคุณยกเลิกการดำเนินงานคิวจะoperationStatusCode-999

คุณสามารถตรวจสอบNSErrorรหัสอื่น ๆและคำอธิบายทั้งหมดได้ในเอกสารของ Apple


7

ฉันสามารถรับรหัสสถานะด้วย Swift 3:

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

0

มันได้ผลสำหรับฉันเพิ่มบรรทัดด้านล่างตามคำขอของคุณ

manager.requestSerializer = [AFJSONRequestSerializer serializer];

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.