问题描述
更新: 我设法将错误范围缩小到 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()
}
}
我不明白我在这里做错了什么。为什么这不起作用?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)