Подтвердить что ты не робот

Как получить данные ответа из ответа NSHTTPURLResponse в обратном вызове AFJSONRequestOperation?

У меня есть ситуация, когда мне нужно получить доступ к необработанным данным ответа для AFJSONRequestOperation, изнутри блока обратного вызова, который включает только NSHTTPURLResponse. Я могу получить statusCode из NSHTTPURLResponse, но не вижу никакого способа добраться до необработанных данных. Есть ли хороший способ получить доступ к этому из блока обратного вызова отказа этой операции?

4b9b3361

Ответ 1

NSHTTPURLResponse содержит только информацию заголовка HTTP; нет данных тела. Нет, это было бы невозможно. Если у вас есть какой-либо контроль над этим кодом, попросите блок или метод передать сам процесс и получите responseData или responseJSON.

Ответ 2

В DataResponse<Any> из responseJSON вы можете получить тело из объекта DataResponse<Any> используя response.result.value или String(data:response.data!, encoding:.utf8).

Вы не можете получить его из response.response, который является объектом NSHTTPURLResponse. Это имеет только информацию заголовка.

Alamofire.request(URL(string: "https://foo.com")!).validate(statusCode: 200..<300).responseJSON() { response in
    let body = response.result.value
}

Если ответ http не проверяет, вышеописанное не работает. но это делает:

Alamofire.request(URL(string: "https://foo.com")!).validate(statusCode: 200..<300).responseJSON() { response in
    let body = String(data:response.data!, encoding: .utf8)
}

Ответ 3

Старый вопрос, но в любом случае...

Вам не нужно добираться до объекта операции, вы можете легко сделать что-то вроде:

NSData * data = [NSJSONSerialization dataWithJSONObject:JSON options:0 error:nil]];

С идентификатором JSON, который получает обратный вызов.