You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift调用API获取数据报401错误,如何添加授权凭证?

Swift GET请求添加授权凭证解决401错误方案

401状态码代表服务端未通过你的身份校验,返回的响应内容不是预期的JSON结构,才会触发JSON解析失败报错。你当前的代码直接传入URL发起请求,没有携带授权所需的请求头,是问题的核心原因。

以下是修改后的完整实现,默认适配最常用的Bearer Token(JWT类凭证)鉴权场景:

func loadData() {
    guard let url = URL(string: getUrl) else { return }
    // 构造URLRequest对象自定义请求参数
    var request = URLRequest(url: url)
    // 指定请求方法为GET
    request.httpMethod = "GET"
    // 替换为你实际的授权凭证
    let authToken = "替换为接口要求的真实Token"
    request.setValue("Bearer \(authToken)", forHTTPHeaderField: "Authorization")
    
    URLSession.shared.dataTask(with: request) { data, res, err in
        // 新增状态码校验,仅200状态码走正常解析逻辑
        guard let httpResponse = res as? HTTPURLResponse, 
              httpResponse.statusCode == 200,
              let data = data else {
            // 调试逻辑:打印错误响应内容便于排查
            if let data = data, let errStr = String(data: data, encoding: .utf8) {
                print("服务端错误返回:\(errStr)")
            }
            print("请求失败,状态码:\((res as? HTTPURLResponse)?.statusCode ?? -1)")
            return
        }
        
        do {
            let result = try JSONDecoder().decode([ItemsModel].self, from: data)
            DispatchQueue.main.async {
                self.items = result
            }
        } catch let error {
            print("JSON解析错误:\(error)")
            // 调试逻辑:打印实际响应内容定位结构差异
            if let resStr = String(data: data, encoding: .utf8) {
                print("实际响应内容:\(resStr)")
            }
        }
    }.resume()
}

如果你的接口使用Basic Auth鉴权,替换上述设置Authorization头的代码即可:

// Basic Auth凭证构造逻辑
let username = "你的接口用户名"
let password = "你的接口密码"
let loginString = "\(username):\(password)"
guard let loginData = loginString.data(using: .utf8) else { return }
let base64LoginString = loginData.base64EncodedString()
request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")
  • 凭证字段名、格式请严格按照你对接的接口文档要求填写,部分特殊接口的授权头可能不使用Authorization作为字段名,请以文档说明为准
  • 新增的调试打印逻辑可以帮助你快速定位后续可能出现的接口参数、返回结构差异问题

内容的提问来源于stack exchange,提问作者Exal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:30:04