SwiftUI向PHP服务发POST请求,参数无法进入$_POST数组求助
解决SwiftUI POST请求参数无法进入PHP $_POST数组的问题
问题原因
你当前的请求将参数序列化为JSON格式,并设置了Content-Type: application/json,这种情况下PHP不会自动把JSON payload解析到$_POST数组,只能通过file_get_contents('php://input')读取。要让参数进入$_POST,需要改用表单编码格式(application/x-www-form-urlencoded)发送请求。
修改后的SwiftUI代码
将参数转换为URL编码的键值对字符串,同时调整请求头的Content-Type:
guard let url = URL(string: "https://testservice.de/login.php") else { print("Error: 无效URL") return } // 把参数转为URL编码的键值对字符串 let params = [ "benutzer": "test", "passwort": "test" ] let paramString = params.map { "\($0.key)=\($0.value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)" } .joined(separator: "&") var request = URLRequest(url: url) request.httpMethod = "POST" request.httpBody = paramString.data(using: .utf8) // 设置PHP能自动解析的Content-Type request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") // 若服务端返回JSON则保留Accept头,否则可移除 request.setValue("application/json", forHTTPHeaderField: "Accept") URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data else { print("Error: 无返回数据") return } let responseText = String(data: data, encoding: .utf8) ?? "编码未知" print("响应内容: \(responseText)") }.resume()
关键修改点
- 替换
JSONSerialization为URL编码字符串生成:每个键值对编码后用&连接,确保特殊字符被正确转义 - 将
Content-Type改为application/x-www-form-urlencoded,这是PHP自动解析参数到$_POST的默认表单格式 - 移除
.prettyPrinted选项,表单格式不需要格式化输出
PHP端验证示例
修改后可直接通过$_POST获取参数:
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $benutzer = $_POST['benutzer'] ?? '未获取到'; $passwort = $_POST['passwort'] ?? '未获取到'; echo "用户名: $benutzer, 密码: $passwort"; } ?>
内容的提问来源于stack exchange,提问作者user1121575
相关产品推荐
相关产品推荐

