【问题标题】:Alamofire InvalidURL in swiftswift中的Alamofire InvalidURL
【发布时间】: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 会返回什么。

标签: ios swift alamofire


【解决方案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+上面的链接
猜你喜欢
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 2015-04-18
  • 2020-04-12
相关资源
最近更新 更多