gpt4 book ai didi

ios - 如何避免 Alamofire 自动更改参数?

转载 作者:行者123 更新时间:2023-11-28 07:03:08 24 4
gpt4 key购买 nike

奇怪的是,当我在 Xcode 控制台中看到,URL 参数的输出与我使用 Alamofire 输入的不一样,

  1. 参数顺序改变
  2. 和额外的数字“25”添加到参数“key”中,

原代码如下:

    let weatherURL="http://open.weather.com.cn/data/"
let params=["areaid":"\(areaid)","type":"forecast_v","date":"\(time)","appid":"1eb583","key":"\(URLEncodeKey)"]

Alamofire.request(.GET, weatherURL, parameters: params)
.responseJSON { (request, response, json, error) in
if((error) != nil){
println(request)
println("Error:\(error)")
}else{
println(request)
println(json)
}
}

控制台中URL的输出:

key:2v7eK8AlzynX%2BuLBgw7DU74f8S0%3D

NSMutableURLRequest: 0x7fe3f14a1bf0 { URL: http://open.weather.com.cn/data/?appid=1eb583&areaid=101020900&date=201507211626&key=2v7eK8AlzynX%252BuLBgw7DU74f8S0%253D&type=forecast_v }

这两个问题导致的错误:

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.)

因此我无法从 API 获取数据。但是当 URL 从上面两个问题中手动更正时,意味着 URL:

http://open.weather.com.cn/data/?areaid=101020900&type=forecast_v&date=201507211626&appid=1eb583&key=2v7eK8AlzynX%2BuLBgw7DU74f8S0%3D

  1. change the parameters sequence as the same in constant "params",
  2. and remove extra "25".

然后它工作了,我可以在网络浏览器中看到来自 API 的响应数据。

请问,我在代码中忽略了哪些问题?

谢谢!

最佳答案

您说您在控制台上看到以下内容:

key:2v7eK8AlzynX%2BuLBgw7DU74f8S0%3D

您没有向我们展示这个 key 是如何实现的值已生成,但这很奇怪,因为该字符串是百分比转义的,它不应该是。如果你删除逃逸百分比,你会看到类似的东西

key:2v7eK8AlzynX+uLBgw7DU74f8S0=

这是一个格式正确的 base64 字符串。

问题是,如果您使用的是 Alamofire,您不应该逃避它(Alamofire 会为您做到这一点)。事实上,这就是为什么您会看到额外的“25”,因为它是第二次转义您的 key 字符串的百分比,替换了 %。带有 %25 的字符.

最后,找出为什么 key已经逃脱了百分比,并防止这种情况发生。 (或者,在将其添加到字典之前,用 stringByReplacingPercentEscapesUsingEncoding 删除逃逸百分比;但是最好防止逃逸百分比而不是添加然后替换逃逸百分比。)如果将 2v7eK8AlzynX+uLBgw7DU74f8S0= 传递给它parameters 中的值字典,一切都应该没问题。


关于 parameters收藏:本parameters是字典,与数组不同,字典不是有序集合,它们不会保留您指定键的顺序。幸运的是,标准 Web 服务器中 HTTP 请求中的参数也不是特定于顺序的,因此这不是问题。

关于ios - 如何避免 Alamofire 自动更改参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31540037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com