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

Alamofire POST请求报错:Invalid value around line 1, column 0 求助

问题排查与修复方案

核心错误原因

这个错误是服务器返回的内容不是合法JSON格式,导致Alamofire的responseJSON无法完成解析。根源出在你的请求构造逻辑上。

代码中的关键问题

  1. HTTP头构造完全错误
    你用var headers = HTTPHeaders(parameters)把请求体参数直接当成HTTP头字段,这是严重错误。HTTPHeaders的该初始化方法是用来生成请求头键值对的,而你的parameters是要放在请求体里的业务参数,不能直接转为请求头。这种错误会导致服务器无法正确处理请求,最终返回非JSON的错误响应。

  2. 冗余的Content-Type设置
    当你使用URLEncoding.httpBody编码方式时,Alamofire会自动设置正确的Content-Type: application/x-www-form-urlencoded; charset=utf-8请求头,手动添加反而可能造成字段冲突。

修复后的代码

func apiPostRequest1(parameters:[String:String], url:String,  completionHandler: @escaping (Any?) -> Swift.Void) {
    // 初始化空的请求头,如需自定义头(如Token)再单独添加
    var headers = HTTPHeaders()
    // headers.add(name: "Authorization", value: "your_custom_token")
    
    session.request(url, 
                   method: .post, 
                   parameters: parameters, 
                   encoding: URLEncoding.httpBody, 
                   headers: headers)
    .validate(statusCode: 200..<600)
    .responseJSON{ response in
        switch response.result {
        case .success(let JSON):
            completionHandler(JSON)
        case .failure(let error):
            print("Request failed with error \(error)")
            // 打印服务器原始响应,方便排查非JSON返回的具体内容
            if let data = response.data, let rawResponse = String(data: data, encoding: .utf8) {
                print("Server raw response: \(rawResponse)")
            }
            completionHandler(response.response?.statusCode)
        }
    }
}

额外排查建议

  • 修复代码后,查看控制台打印的Server raw response内容:如果是合法JSON,说明问题已解决;如果仍是HTML、纯文本等非JSON内容,需要和后端确认接口的响应格式是否符合约定。
  • 用Postman等工具模拟相同请求,验证服务器返回内容是否为合法JSON,排除服务器端问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:46:01