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

Swift中使用URLSession.shared.data请求API时如何启用JavaScript?

问题解决:URLSession请求API返回浏览器兼容提示

问题现象

使用以下代码请求API时:

let (retrieved_data, error) = try await URLSession.shared.data(from: apiURL!)

返回两条错误提示:

Your Browser is not supported. Please use IE10 or later!
You need to enable JavaScript to run this app

原因分析

服务器通过请求头中的User-Agent字段识别客户端类型,URLSession默认的User-Agent是应用专属标识(例如YourApp/1.0 (iPhone; iOS 16.0)),被服务器判定为不兼容的浏览器;而"需要启用JavaScript"的提示通常是同一检测逻辑的附带结果,并非真的需要执行JS——因为URLSession本身是纯网络请求工具,不具备JS执行环境。

解决方案

自定义URLRequest,模拟现代浏览器的请求头,重点设置User-Agent字段:

示例代码

guard let apiURL = apiURL else {
    fatalError("Invalid API URL")
}

// 构造请求并设置浏览器模拟头
var request = URLRequest(url: apiURL)
// 模拟Safari浏览器的User-Agent(可根据需要换成Chrome等其他浏览器UA)
request.setValue(
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15",
    forHTTPHeaderField: "User-Agent"
)
// 补充Accept头,匹配常见API的接受格式
request.setValue(
    "application/json, text/plain, */*",
    forHTTPHeaderField: "Accept"
)

do {
    let (retrievedData, response) = try await URLSession.shared.data(for: request)
    // 解析retrievedData中的JSON内容
    if let json = try? JSONSerialization.jsonObject(with: retrievedData) {
        print(json)
    }
} catch {
    print("Request error: \(error.localizedDescription)")
}

额外提示

如果设置User-Agent后仍然报错,可能服务器还在验证其他请求头(如Referer、Cookie),或该API依赖浏览器环境生成的会话信息。这种情况下可以尝试:

  • 添加更多浏览器常用请求头(如Accept-Language、Cache-Control)
  • 使用WKWebView加载目标页面,通过JS注入获取所需数据(适合依赖前端渲染的场景)

内容的提问来源于stack exchange,提问作者Timo R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:30:02