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

Swift用Alamofire请求Flask服务器报错-1004:真机运行异常

解决Alamofire真机请求Flask服务器返回-1004错误的问题

嘿,这个-1004错误我之前踩过坑,它对应的是NSURLErrorCannotConnectToHost,本质就是你的iPhone真机没法成功连接到本地的Flask服务器。咱们一步步排查解决:

最常见的两个原因(优先检查)

  • 模拟器和真机不在同一局域网:模拟器共享Mac的网络,而真机必须和Mac连同一个WiFi。另外绝对不能用localhost或者127.0.0.1作为请求地址——这两个地址在真机上指向的是它自己,不是你的Mac。你得换成Mac的局域网IP地址,比如你的Mac IP是192.168.3.10,那请求URL应该是http://192.168.3.10:5000(默认Flask端口是5000)。
  • Flask服务器仅绑定本地地址:默认情况下,Flask启动时只会监听127.0.0.1,也就是只有Mac自己能访问。你需要让它监听所有网卡,这样局域网里的真机才能连接。启动Flask时加上--host=0.0.0.0参数:
    flask run --host=0.0.0.0
    
    或者在Flask代码里直接设置:
    if __name__ == '__main__':
        app.run(host='0.0.0.0')
    

其他可能的问题及修复

  • URL参数手动拼接导致编码错误:你现在直接把参数拼在URL里,如果downloadLinks包含特殊字符(比如&、空格、中文),会直接破坏URL结构,导致请求失败。Alamofire推荐用parameters参数传递,它会自动帮你做URL编码:
    private func sendRequestToFlaskServer(url: String, uid: String, name: String, downloadLinks: String, type: String, completion :@escaping (String)->()){
        let parameters: [String: Any] = [
            "user": uid,
            "name": name,
            "type": type,
            "links": downloadLinks
        ]
        Alamofire.request(url, method: .get, parameters: parameters).responseData { response in
            if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
                completion(utf8Text)
            }
        }
    }
    
  • iOS ATS限制拦截请求:虽然现在ATS默认允许HTTP请求,但如果服务器配置不符合要求,可能会被拦截。你可以在Info.plist里添加例外规则,允许访问你的服务器地址:
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>你的Mac局域网IP(比如192.168.3.10)</key>
            <dict>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>
    
  • Mac防火墙阻止连接:Mac的防火墙可能会拦截Flask服务器的端口请求。你可以去「系统设置」→「安全性与隐私」→「防火墙」里,允许Flask相关的进程接受传入连接,或者临时关闭防火墙测试是否能正常连接。

内容的提问来源于stack exchange,提问作者N.Barz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:23:56