95 lines
3.2 KiB
Swift
95 lines
3.2 KiB
Swift
import Foundation
|
||
|
||
// 可选:定义响应模型(根据你的实际返回结构调整)
|
||
//struct LoginResponse: Codable {
|
||
// let code: Int?
|
||
// let message: String?
|
||
// let [String: AnyCodable]? // 或具体结构,如 token, userId 等
|
||
//}
|
||
|
||
// 因为 Dictionary<String, Any> 不能直接 Codable,这里用 AnyCodable 简化
|
||
//enum AnyCodable: Codable {}
|
||
|
||
func passwordLogin(username: String, password: String) {
|
||
guard let url = URL(string: "https://api.memorywake.com/api/v1/iam/login/password-login") else {
|
||
print("❌ 无效的URL")
|
||
return
|
||
}
|
||
|
||
// 1. 创建 URLRequest
|
||
var request = URLRequest(url: url)
|
||
request.httpMethod = "POST"
|
||
|
||
// 2. 设置请求头
|
||
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
|
||
// 如果接口需要,也可以加 User-Agent 或其他 header
|
||
request.setValue("iOS App", forHTTPHeaderField: "User-Agent")
|
||
|
||
// 3. 准备参数
|
||
let parameters = [
|
||
"account": username,
|
||
"password": password
|
||
]
|
||
|
||
// 4. 将参数编码为 JSON
|
||
do {
|
||
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: [])
|
||
} catch {
|
||
print("❌ 参数序列化失败: \(error)")
|
||
return
|
||
}
|
||
|
||
// 5. 发送请求
|
||
let task = URLSession.shared.dataTask(with: request) { data, response, error in
|
||
// 回调在后台线程,更新 UI 需切主线程
|
||
DispatchQueue.main.async {
|
||
if let error = error {
|
||
print("网络错误: \(error)")
|
||
return
|
||
}
|
||
|
||
// 检查状态码
|
||
if let httpResponse = response as? HTTPURLResponse {
|
||
print("状态码: \(httpResponse.statusCode)")
|
||
|
||
if httpResponse.statusCode == 404 {
|
||
print("⚠️ 接口未找到,请确认:")
|
||
print("1. 后端服务是否正在运行?")
|
||
print("2. IP 和端口是否正确?")
|
||
print("3. 网络是否在同一局域网?")
|
||
return
|
||
} else if httpResponse.statusCode != 200 {
|
||
print("服务器错误: \(httpResponse.statusCode)")
|
||
}
|
||
}
|
||
|
||
// 处理返回数据
|
||
guard let data = data else {
|
||
print("❌ 无返回数据")
|
||
return
|
||
}
|
||
|
||
// 打印原始响应(调试用)
|
||
if let jsonString = String(data: data, encoding: .utf8) {
|
||
print("响应内容: \(jsonString)")
|
||
}
|
||
|
||
// 尝试解析为 JSON 字典
|
||
do {
|
||
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
|
||
print("解析成功: \(json)")
|
||
|
||
// 如果你有明确的模型,可以用 JSONDecoder 解码 LoginResponse
|
||
// let decoder = JSONDecoder()
|
||
// let loginResult = try decoder.decode(LoginResponse.self, from: data)
|
||
}
|
||
} catch {
|
||
print("❌ JSON 解析失败: \(error)")
|
||
}
|
||
}
|
||
}
|
||
|
||
// 启动请求
|
||
task.resume()
|
||
}
|