如何在Swift中的URLSession请求中添加POST参数

时间:2018-06-04 21:53:49

标签: php ios swift rest

我想将POST参数添加到我的服务器的URLSession请求中。 服务器代码:

if (isPost()) {
$response["code"] = 200;
$response["message"] = "success";

if (isset($_POST['imei']) && isset($_POST['token'])) {
    $db = getDB();

    $imei = $_POST['imei'];
    $token = $_POST['token'];

    $token = getTokenFromServer($db, $imei);
    //echo $token;

}else {
    $response["code"] = 400;
    $response["message"] = "no params sent";
}

}else {
    $response["code"] = 400;
    $response["message"] = "is not post method";
}

这是Swift中的客户端代码:

guard let url = URL(string: "https://api-ru.000webhostapp.com/auth.php") else { return }

    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.addValue("text", forHTTPHeaderField: "hello")
    let session = URLSession.shared
    session.dataTask(with: request) { (data, response, error) in

        if let data = data {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                print(json)
            } catch {
                print("ERROR")
                print(error)
            }
        }

        }.resume()

我总是得到

{
   code = 400;
   message = "no params sent";
}

我尝试添加以下代码

request.addValue("345346343", forHTTPHeaderField: "imei")
request.addValue("sdfsdHsdlf43sdfFGsd3l", forHTTPHeaderField: "token")

但它对我没有帮助。 请帮助我如何添加参数来获取200。 感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用request.httpBody

发送给他们

就像那样:

guard let url = URL(string: "https://api-ru.000webhostapp.com/auth.php") else { return }

    var request = URLRequest(url: url)
    request.httpMethod = "POST"
  //  request.addValue("text", forHTTPHeaderField: "hello")
  request.addValue("application/json", forHTTPHeaderField: "Content-Type")
   request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Accept")

   let parameters = ["imei": "imeiValue", "token": "tokenValue"]
do {
        request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)  // Json Body
    } catch let error {
        print(error.localizedDescription)
    }

    let session = URLSession.shared
    session.dataTask(with: request) { (data, response, error) in

        if let data = data {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                print(json)
            } catch {
                print("ERROR")
                print(error)
            }
        }

        }.resume()