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

Swift 4中URLSession dataTask返回nil响应且报404页面未找到求助

排查Swift 4 URLSession请求返回404的问题

看起来你遇到的核心问题很典型:Objective-C版本的请求能正常工作,但迁移到Swift 4后返回404。既然OC版本没问题,ATS配置大概率不是罪魁祸首,我们可以从请求细节的差异入手排查:

1. 核对请求核心参数与OC版本的一致性

404通常意味着服务端找不到你请求的资源,很大概率是Swift请求的某个关键参数和OC版本不符:

  • 请求方法:确认Swift代码里的method变量是否和OC版本完全一致(比如OC用POST,Swift是不是误传成了GET?)。
  • 请求体编码:检查data.toEncodedData()的实现,是不是和OC里的参数编码逻辑一致?比如OC如果是用application/x-www-form-urlencoded格式拼接参数,Swift里是不是错误地用了JSON编码?可以把OC和Swift的请求体内容打印出来对比。
  • 请求头:OC版本有没有设置额外的请求头(比如Content-Type、User-Agent)?Swift的URLRequest里有没有漏掉这些?很多服务端会严格校验Content-Type,如果缺失或不匹配,就会导致路由匹配失败。

2. 打印完整请求信息做对比

在Swift代码里,创建完urlRequest后,添加这些打印语句,把请求的所有细节输出:

print("请求方法: \(urlRequest.httpMethod ?? "未设置")")
print("请求头: \(urlRequest.allHTTPHeaderFields ?? [:])")
print("请求体内容: \(String(data: urlRequest.httpBody ?? Data(), encoding: .utf8) ?? "空")")
print("请求URL: \(urlRequest.url?.absoluteString ?? "无效URL")")

把这些输出和OC版本的请求信息逐项对比,肯定能找到差异点——这几乎是解决这类问题最快的方式。

3. 检查URLSession代理与配置

你给URLSession设置了delegate: self,有没有实现可能修改请求的代理方法?比如urlSession(_:willPerformHTTPRedirection:newRequest:completionHandler:)如果错误地重定向了请求,也可能导致404。另外,确认URLSessionConfiguration.default的参数(比如超时时间)是否和OC版本一致,虽然这导致404的概率较低,但可以排除。

4. 最后再确认ATS配置

虽然OC版本正常,但还是快速检查下Info.plist里的ATS配置是否正确:

  • 确认NSAppTransportSecurity字典已正确添加
  • 如果是针对特定域名配置,检查NSIncludesSubdomains、NSExceptionMinimumTLSVersion等键是否设置正确,域名是否和请求的URL完全匹配

总结

最可能的原因就是Swift请求的某个细节(方法、编码、请求头)和OC版本不一致,导致服务端无法匹配到对应的接口。先通过打印请求信息对比差异,应该就能快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:42:31