Help us understand the problem. What is going on with this article?

SwiftでjsonをphpへPOSTする

More than 3 years have passed since last update.

ねらい

  • 他でswift+jsonのpostがなかった
  • 一番書かれているプログラムもswiftのバージョンが2系だったりphp側の処理がないので、今回は3系で記述しphpも #実行環境
  • swift3
  • Xcode:8.4 beta
  • macOS:Sierra 10.12.3
  • php:7.0.15
  • MAMP:4.1.1

Swift側

一番やりたかったことが書かれたコードがあったんですが、2系だったため、今回はこれを3系に書き直しています。

override func viewDidLoad() {
        super.viewDidLoad()

        let urlString = "http://localhost:8888/test/postTest.php"

        let request = NSMutableURLRequest(url: URL(string: urlString)!)

        request.httpMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")



        let params:[String:Any] = [
            "foo": "bar",
            "baz":[
                "a": 1,
                "b": 2,
                "x": 3]
        ]

        do{
            request.httpBody = try JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)

            let task:URLSessionDataTask = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {(data,response,error) -> Void in
                let resultData = String(data: data!, encoding: .utf8)!
                print("result:\(resultData)")
                print("response:\(response)")

            })
            task.resume()
        }catch{
            print("Error:\(error)")
            return
        }
 }

コードの説明(適当なところ)

let urlString = "http://localhost:8888/test/postTest.php"

POST先のURIをここでい指定します。

let params:[String:Any] = [: , :]

ここで、jsonファイルを作ってます。
swiftだとDictionary型が良いみたい。

let resultData = String(data: data!, encoding: .utf8)!

ここで、サーバーでのファイル処理結果を表示します。

PHP

本当に簡単に。

<?php

//recieve json from swift code
$json = file_get_contents('php://input');
echo $json;
$data = json_encode($json);
echo $data;
?>

コードの説明(適当なところ)

file_get_contents('php://input')

file_get_contents
->ファイルの中身をすべて文字列に読み込む

なにやら、bodyにくっついてるjsonデータをそのまま読み込む際は、引数に'php://input'を指定するとのこと。

動作結果

Xcodeに次の結果が表示されます。

Kobito.QiwfRg.png

参考ページ

zakiyamaaaaa
主な生息地がTwitterのiOSフリーランサー 未来予測とか恋愛についてつぶやいてます
https://twitter.com/zakiyamaaaaa
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away