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的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 失败:Alamofire 中的 responseValidationFailed(状态码 401)

Swift 3 中的 Alamofire?

Alamofire Swift 3.0 调用中的额外参数

swift中的Alamofire InvalidURL

Swift中的Alamofire分段上传帖子错误

Swift 中的 Alamofire .post。 “调用结果未使用,但产生‘DataRequest’