为什么Alamofire参数括号编码?

问题描述 投票:0回答:1

使用 Alamofire 时

使用GET传递参数时出现问题!
  • 传递参数会自动对括号进行编码,必须将未编码的值传递给服务器

有人可以帮助我吗?

   
     let url = "\(urlAIString)/Url-Space/position=[\(userLocation)]"
     AF.request(url,method: .get){
            ....
     }

我希望将括号传递到服务器而不进行编码。但是,我遇到了不便,因为括号是用 Base64 编码并交付的

swift http alamofire crud
1个回答
0
投票

我希望将括号传送到服务器而不进行编码。

这不是 URL,因此您使用的协议不是 HTTP。回到RFC 1738,规范很清楚:

因此,只有字母数字、特殊字符“$-_.+!*'(),”和 可以使用保留字符用于其保留目的 URL 中未编码。

虽然您(以及您使用的服务)可以自由定义一些看起来很像 HTTP 的非 HTTP 协议,但也支持非 URL 的类似 GET 的请求,但这不是协议 URLSession(Almofire 所依赖的)支持。您可以构建自己的网络传输来与此服务交互。一般来说,您需要在 Network 框架之类的框架之上构建它。这通常是一项很好的工作,因此通常更容易让您的服务使用 HTTP 等标准协议和正确编码的 URL,而不是发明您所描述的自定义协议。

如果您确实构建了自定义协议来与此服务通信,请查看NWProtocolTLS。如果您的服务与 HTTP/1.0 非常相似,并且您不使用任何高级功能,那么在 TLS 连接之上从头开始构建它并不困难。 (TLS 的实现需要大量工作,因此让系统为您完成这项工作。)简单的 HTTP 可以手动编写和解析。

但我建议修复您的服务器。通常更容易。

© www.soinside.com 2019 - 2024. All rights reserved.