2016-12-17 4 views
0

Je ne peux pas obtenir l'URLSession pour envoyer quoi que ce soit dans le corps d'une requête POST.Swift 3 URLSession envoyant une requête vide

Voici mon code:

// Set up the request 
var request = URLRequest(url: URL(string: baseURL + url)!) 
request.httpMethod = "POST" 
let jsonData = try JSONSerialization.data(withJSONObject: values, 
                options: .prettyPrinted) 
request.httpBody = jsonData 
request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
request.addValue("application/json", forHTTPHeaderField: "Accept") 
let config = URLSessionConfiguration.ephemeral 
let session = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue.main) 
let task = session.dataTask(with: request) { data, response, err in 
    if let err = err { 
     print(err) 
    } 
    else { 
     let jsondata = data! 
     do { 
      let sessionData = 
         try JSONSerialization.jsonObject(with: jsondata, options: .mutableLeaves) 
          as? Dictionary<String, String> 
      callback.taskComplete(response: sessionData, task: task) 
     } 
     catch { 
      print(error) 
     } 
    } 
} 
task.resume() 

Le serveur reçoit la demande, mais le corps est vide et l'en-tête de type de contenu est nul. Je ne peux pas utiliser la session par défaut car je développe des certificats auto-signés, j'ai donc besoin que ma classe soit un délégué URLSession. J'utilise Swift 3, XCode 8 et iOS 10. Toute aide serait appréciée.

+0

Avez-vous vraiment des données dans la propriété 'jsonData'? –

+0

déboguer votre projet à jsondata ou imprimer et vérifier le journal –

+0

Tout semble bon, la seule chose qui peut avoir des problèmes est votre 'httpBody'. –

Répondre

0

Problème résolu. C'était une combinaison d'erreurs. Si l'URL n'a pas le "/" final, Jetty envoie une redirection 302 à la même URL avec la barre oblique ajoutée. Le client iOS fait la redirection avec un "GET", donc il n'y a rien dans le corps. Lorsque j'ajoute le "/" final, la requête fonctionne correctement.

J'espère que cette réponse aidera quelqu'un à faire le développement iOS. J'ai cherché Google pendant des heures avant de poster cette question. J'ai finalement trouvé la réponse dans un post à propos de Apache Java HttpClient. Il a le même comportement.

Merci pour toutes les réponses.