如何修复URL冒号被转义为%3a导致的主机找不到错误
问题描述
开发过程中编写如下URL配置代码:
components.host = "37.143.66.25:9875"
该配置值包含冒号:,发起网络请求时收到如下错误信息:NSLocalizedDescription=A server with the specified hostname could not be found., NSErrorFailingURLStringKey=http://37.143.66.25%3a9875/spots/test, NSErrorFailingURLKey=http://37.143.66.25%3a9875/spots/test, _kCFStreamErrorDomainKey=12}
错误信息中原本的冒号:被自动转义为%3a,导致主机解析失败、请求报错。
解决方案
- 问题根源是URL组件的
host属性仅接收纯主机标识(IP地址或域名),不允许直接拼接端口号。系统识别到host字段内的冒号属于非法字符,会自动对其做百分号转义,最终生成错误的请求地址。 - 正确处理方式是将IP地址和端口号拆分后分别赋值:纯IP部分赋值给
host属性,数字格式的端口号单独赋值给port属性,参考代码如下:
// 单独赋值主机IP components.host = "37.143.66.25" // 单独赋值端口号 components.port = 9875
- 拆分赋值后再生成最终请求URL,系统会自动在主机和端口之间补充合法的冒号分隔符,不会触发错误转义,最终生成的正确请求地址为
http://37.143.66.25:9875/spots/test,可正常完成主机解析和请求发送。
注意:不要尝试手动对host字段做百分号反解码处理,该操作会触发URL组件的合法性校验逻辑,引发其他异常,拆分字段赋值是符合系统设计规范的标准处理方案。
内容的提问来源于stack exchange,提问作者Gekd
相关产品推荐
相关产品推荐

