swift中的Alamofire InvalidURL
Posted
技术标签:
【中文标题】swift中的Alamofire InvalidURL【英文标题】:Alamofire InvalidURL in swift 【发布时间】:2018-12-06 00:17:02 【问题描述】:我正在尝试使用 alamofire 从 api 获取数据,它给了我 无效URL("http://tdlly.com/Api/Advertisements/1/18") 我尝试对 url 进行编码,但也无法正常工作,这是我的代码
class func nearAds(completion: @escaping(_ error: Error?, _ data:[Ad]?)->Void)
let url = URLs.nearAds+"\(helper.getApiToken())"
//let s = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
Alamofire.request(url, method: .get, parameters: nil, encoding: URLEncoding.default , headers: nil).responseJSON (response) in
switch response.result
case.failure(let error):
completion(error,nil)
print("error for nearAds",error)
case.success(let value):
let json = JSON(value)
print("near,\(json)")
guard let dataArr = json.array else
completion(nil , nil)
return
var ads = [Ad]()
for data in dataArr
if let data = data.dictionary ,let result = Ad.init(dic: data)
ads.append(result)
completion(nil,ads)
【问题讨论】:
helper.getApiToken() 的返回值是可选的吗?如果是这样,您的 url 字符串将由 "Optional("")" 组成。 @koropok 我将登录 json 中的令牌保存在 userDefaults 并通过这个 func 类 func getApiToken() -> Int let def = UserDefaults.standard return (def.object(forKey: "user_id ") as! int) 我在 alamofire 上运行了您的 URL,它似乎可以正常工作。你能在你的网址上打印一下吗? @koropok tdlly.com/Api/Advertisements/1/18 这是带有令牌 ID 的 url,当我在邮递员处尝试它时它的工作但在 xcode 不工作时给我 invaildURL 为了调试你的错误,我会使用 Postman。抛出一个断点并在调试器中键入po url
。然后,在 Postman 中,从调试器中转储该 url,看看 API 会返回什么。
【参考方案1】:
尝试将http协议添加到字符串。
所以例如你的链接看起来像http://tdlly.com/Api/Advertisements/1/18
如果您已经这样做了,请在行后显示调试打印(po url)的屏幕截图
let url = URLs.nearAds+"\(helper.getApiToken())"
并确保您在Info.plist
中启用了NSExceptionAllowsInsecureHTTPLoads
在这里查看Transport security has blocked a cleartext HTTP
【讨论】:
是的,我的朋友。你会在上面看到它已经 http:// 协议,是的,我已经启用了传输安全这个消息 invaildURL("tdlly.com/Api/Advertisements/1/18") 您的令牌是否包含#
符号?告诉 URLs.nearAds 里面有什么并展示 getApiToken() 返回值的例子
po url
在调试控制台中打印什么?
正如我上面告诉你的我的朋友 invalidURL+上面的链接以上是关于swift中的Alamofire InvalidURL的主要内容,如果未能解决你的问题,请参考以下文章