web-dev-qa-db-fra.com

Comment extraire les données de réponse de NSHTTPURLResponse dans le rappel d'AFJSONRequestOperation?

J'ai une situation où j'ai besoin d'accéder aux données de réponse brutes pour un AFJSONRequestOperation, à partir du bloc de rappel qui comprend uniquement NSHTTPURLResponse. Je suis en mesure d'obtenir le statusCode de NSHTTPURLResponse, mais je ne vois aucun moyen d'accéder aux données brutes. Existe-t-il un bon moyen que quelqu'un connaisse pour y accéder à partir du bloc de rappel d'échec de cette opération?

26
Todd Hopkinson

NSHTTPURLResponse contient uniquement des informations d'en-tête HTTP; pas de données corporelles. Alors non, ce serait impossible. Si vous avez un contrôle sur ce code, demandez au bloc ou à la méthode de passer l'opération elle-même et obtenez responseData ou responseJSON.

43
mattt

Dans le rappel de responseJSON, vous pouvez obtenir le corps d'un objet DataResponse<Any> En utilisant response.result.value Ou String(data:response.data!, encoding: .utf8).

Vous ne pouvez pas l'obtenir à partir de response.response, Qui est un objet NSHTTPURLResponse. Cela n'a que des informations d'en-tête.

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

Si la réponse http ne valide pas, ce qui précède ne fonctionne pas. mais cela fait:

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