J'ai une construction web angulaire dans une application iOS et je veux POST
requêtes jusqu'à la couche native avec quelques JSON
que je peux utiliser pour créer des fonctionnalités natives. J'utilise le vieux UIWebView
(car Angulaire) donc j'utilise un NSURLProtocol
pour intercepter la requête. Cela fonctionne et je peux casser au point que la demande entre. Le problème est que je ne peux pas voir le JSON
dans la propriété de données à ce stade parce que ce n'est pas la réponse. La requête est toujours dans l'objet config mais je n'ai aucune idée de comment l'attraper.Comment puis-je obtenir des données sur l'objet de config NSURLRequest
Mon code angulaire pour créer le poste est actuellement comme ceci:
var newdata = $.param({
json: JSON.stringify({
name: "Lee"
})
});
$http.post(url, newdata)
et dans ma NSURLProtocol
classe j'Intercepter avec succès ce POST dans cette méthode, mais la propriété HTTPBody est nul:
override class func canInitWithRequest(request:NSURLRequest) -> Bool {
if (request.URL!.absoluteString as NSString).containsString("request_media_gallery") {
if(request.HTTPBody != nil){
let data:NSData = request.HTTPBody!
print(data)
}
return true
}
return request.URL?.host == "file"
}
Si je débogue cela en chrome, j'obtiens un 405 à cause de CORS mais je peux voir que mon objet request n'a pas de données mais qu'il a un objet config. Voici le journal de la console de Chrome:
Alors, comment pouvons-nous lire ce NSInputStream? Le mien semble dire "aucun bytes disponible" – Jelle
Annoyingly, les octets ne deviennent réellement disponibles jusqu'à un cycle plus tardif de la boucle d'exécution. Pour gérer la lecture: 1. Définissez-vous en tant que délégué du flux. 2. Planifiez-le dans une boucle d'exécution. 3. Ouvrez le flux. 4. Implémentez les méthodes de délégation de bytes disponibles. 5. Faites votre travail après il dit qu'il y a des octets disponibles. – dgatwood