Alamofire 编码无效URL

Posted

技术标签:

【中文标题】Alamofire 编码无效URL【英文标题】:Alamofire encoding invalidURL 【发布时间】:2017-09-26 21:06:50 【问题描述】:

大家下午好,这里的新手正在尝试学习 Swift / Alamofire。我已经为此苦苦挣扎了将近两天,准备继续前进。

我的 URL 似乎已更正,但在发出请求时出现错误。在查看 Xcode 调试日志时,看起来我的单引号在发送请求时被转义了。

let owner : String = "me@corp.local"

func getDeploymentsByOwner(token: String, owner: String, success: @escaping (JSON) -> Void, failure: @escaping (Error) -> Void) 

    let headers = [
        "Authorization": "Bearer \(token)",
        ]
    print(owner)


    let url = "https://corp.local?$filter=owners/ref eq '\(owner)'"


    // created URL is https://corp.local?$filter=owners/ref eq 'me@corp.local'


    Alamofire.request(url, method: .get, encoding: URLEncoding.queryString, headers: headers).responseJSON  (responseObject) -> Void in
        if responseObject.result.isSuccess 
            let resJSON = JSON(responseObject.result.value!)
            success(resJSON)
        
        if responseObject.result.isFailure 
            let error = responseObject.result.error
            print(error)
            failure(error!)
        
    

我的错误信息如下所示 // Xocde 调试错误

Optional(Alamofire.AFError.invalidURL("https//:corp.local?$filter=owners/ref eq \'me@corp.local\'"))
invalidURL(https://corp.local?$filter=owners/ref eq \'me@corp.local\'")

我可以不使用 $filter 获取所有项目,因此只要省略过滤器,请求就可以工作。

// Postman 使用生成的 URL,但带有反斜杠 () 的 URL 不会

【问题讨论】:

尝试编码网址 感谢您的反馈。你是怎么编码的? 你能在哪里解决这个问题? 【参考方案1】:

感谢您的回复,很遗憾没有成功。整个 URL 被破坏了,包括主机名。但它确实给了我一个起点来解决这个问题,谢谢。工作代码如下

    let url = "https://corp.local?$filter=owners/ref eq '\(owner)'"
    let encodedUrl = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

【讨论】:

【参考方案2】:

请检查:

let url = "https//:corp.local?$filter=owners/ref eq \'me@corp.local\'"
let urlEncoded = url.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
print(urlEncoded!)

【讨论】:

以上是关于Alamofire 编码无效URL的主要内容,如果未能解决你的问题,请参考以下文章

swift中的Alamofire InvalidURL

使用 Alamofire 的无效证书、表单数据和 HTTP 标头数据

在 Alamofire 上使用 DisableEvaluation 信任无效证书

Swift - Alamofire “字符 0 周围的值无效。”

Alamofire V3 如何使凭证无效

如何使用 Alamofire 访问具有无效证书的本地 Https?