2016-12-17 16 views
0

POSTリクエストの本文に何かを送るURLSessionを取得できません。ここSwift 3 URLSessionが空のリクエストを送信しています

が私のコードである:

// 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() 

サーバは要求を受信したが、体は空であり、コンテンツタイプヘッダがnullです。自己署名証明書を使って開発しているのでデフォルトのセッションを使用できないため、クラスをURLSessionデリゲートにする必要があります。

私はSwift 3、XCode 8、およびiOS 10を使用しています。助けていただければ幸いです。

+0

本当に 'jsonData'プロパティにデータがありますか? –

+0

jsondataでプロジェクトをデバッグするか、ログに記録してチェックしてください –

+0

すべてがうまく見えますが、唯一の問題はあなたの 'httpBody'です。 –

答えて

0

問題を解決しました。それはエラーの組み合わせだった。 URLの末尾に "/"がない場合、Jettyはスラッシュを付加した同じURLに302リダイレクトを送信します。 iOSクライアントはリダイレクトを「GET」するので、本文には何もありません。末尾の "/"を追加すると、要求は正常に動作します。

私はこの回答がiOS開発を行う人に役立つことを願っています。私はこの質問を投稿する前に数時間Googleを検索しました。私はApache Java HttpClientについての記事で答えを見つけました。それは同じ振る舞いをしています。

ありがとうございます。

関連する問題