Urlsession 域解析不适用于 DynDNS url

问题描述

更新: 我设法将错误范围缩小到 URLSession 的域名解析。当我用

替换url2时
url2 = "http://194.x.x.x:8080/getAPIdata"

使用我的“公共”IP 地址,然后它可以在 APP 和 Safari 中运行。 一定是 URLSession 无法正确解析域名到其 IP 地址。有人知道如何解决这个问题吗?

================================================ ==

我正在使用 URLSession 从本地托管的 API 获取数据,并使用动态 DNS url 转发以供外部访问。

url1 = "http://10.x.x.x:8080/getAPIdata"
url2 = "http://myown.domain.com:8080/getAPIdata"

这两个网址都可以在本地 (url1) 和远程 (url2) 中使用。

安装在手机上的应用程序也能正常工作。使用本地 url (url1) 和本地 Wifi 时。

安装在手机上的应用程序不会加载任何数据,当我通过第三方 ISP 连接时使用远程 url (url2) 时,所以当我不在 LAN 上时。

这是我从 API 检索数据的函数

func getData(completion: @escaping ([JSONModel]) -> ()){

//    let url = "http://10.x.x.x:8080/getAPIData"
    let url = "http://myown.domain.com:8080/getAPIData"
    let urlComponents = URLComponents(string: url)
    let session = URLSession(configuration: .default)
    //proper unwrap
    if let url = urlComponents?.url {
        session.dataTask(with: url) { (data,res,err) in
            
            if err != nil {
                if let err = err as Error? {
                    print(err.localizedDescription)
                }
                return
            }
            
            if let data = data{
                do{
                    let jsonData = try JSONDecoder().decode([JSONModel].self,from: data)
                    print(jsonData)
                    completion(jsonData)
                }catch{
                    print(error.localizedDescription)
                    
                }
            }
            
        }
        .resume()
    }
}

我不明白我在这里做错了什么。为什么这不起作用?

  1. https://developer.apple.com/documentation/foundation/urlsession

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)