Swift中如何打印HTTP响应到控制台?JSON序列化报错排查
在Swift中打印HTTP响应与排查JSON序列化错误
一、打印完整HTTP响应到控制台
要把HTTP响应的详细信息输出到控制台,你可以在获取到HTTPURLResponse后直接打印状态码、响应头、请求URL等关键信息:
let task = URLSession.shared.dataTask(with: request) { urlData, response, reponseError in if let res = response as? HTTPURLResponse { // 打印响应状态码 print("响应状态码: \(res.statusCode)") // 打印所有响应头信息 print("响应头: \(res.allHeaderFields)") // 打印响应对应的URL print("响应URL: \(res.url?.absoluteString ?? "无有效URL")") if res.statusCode == 200 { // 后续业务逻辑... } } } task.resume()
二、查看原始响应数据排查JSON序列化错误
当JSONSerialization抛出无效JSON错误时,最直接的排查方式是先把二进制响应数据转成字符串打印,确认返回的内容是否符合预期(可能是格式错误的JSON、HTML错误页面或其他非JSON内容):
let task = URLSession.shared.dataTask(with: request) { urlData, response, reponseError in if let res = response as? HTTPURLResponse { if res.statusCode == 200 { guard let data = urlData else { print("无响应数据") return } // 尝试用UTF-8解码原始数据并打印 if let rawContent = String(data: data, encoding: .utf8) { print("原始响应内容:\n\(rawContent)") } else { // UTF-8解码失败时,尝试ISO-Latin-1编码 if let rawContent = String(data: data, encoding: .isoLatin1) { print("原始响应内容(ISO-Latin-1解码):\n\(rawContent)") } else { print("无法解码响应数据") } } do { let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? NSDictionary // 后续JSON处理逻辑... } catch { // 打印JSON序列化的具体错误 print("JSON序列化失败: \(error.localizedDescription)") } } } } task.resume()
关键提示:
- 大部分接口用UTF-8编码,若解码失败可根据实际场景尝试其他编码格式
- 如果打印出HTML内容,说明接口可能返回了错误页面而非预期JSON,需检查请求参数或接口状态
内容的提问来源于stack exchange,提问作者Kendall Crouch
相关产品推荐
相关产品推荐

