You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift与Postman的Base64编码不一致问题咨询及修复方案

问题分析与解决方案

差异原因

Postman生成的编码遵循HTTP Basic Authentication的标准规则:将用户名:密码的格式拼接后再进行Base64编码。这里你的sandbox-key作为用户名,密码为空,所以实际编码的原始字符串是sk_289d8dd8e721484c9c8c63e39899cf90:(末尾带冒号)。

而你的Swift代码直接对sk_289d8dd8e721484c9c8c63e39899cf90(无冒号)进行Base64编码,自然会得到不同结果。Postman编码末尾的冒号来自原始拼接字符串的冒号;Swift编码末尾的等号是Base64的填充字符,对应无冒号的原始字符串。

修复方法

修改Swift代码,按照Basic Auth规则拼接字符串后再编码:

// 1. 按Basic Auth规则拼接:用户名 + ":" + 密码(密码为空)
let authString = "sk_289d8dd8e721484c9c8c63e39899cf90:"
// 2. 执行Base64编码
guard let authHeader = authString.base64Encoded() else {
    fatalError("Base64编码失败")
}
// 3. 转换为URL-safe格式(按需使用)
let authHeaderBase64 = toggleBase64URLSafe(item: authHeader, on: true)

public extension String {
    func base64Encoded() -> String? {
        return data(using: .utf8)?.base64EncodedString()
    }
}

func toggleBase64URLSafe(item: String, on: Bool) -> String {
    if on {
        let base64url = item.replacingOccurrences(of: "/", with: "_")
            .replacingOccurrences(of: "+", with: "-")
            .replacingOccurrences(of: "=", with: "")
        return base64url
    } else {
        var base64 = item.replacingOccurrences(of: "_", with: "/")
            .replacingOccurrences(of: "-", with: "+")
        if base64.count % 4 != 0 {
            base64.append(String(repeating: "=", count: 4 - base64.count % 4))
        }
        return base64
    }
}

关键注意点

  • 末尾冒号是Basic Auth的强制要求,即使密码为空也不能省略。
  • 如果接口接受标准Base64而非URL-safe格式,直接使用authHeader即可,无需调用toggleBase64URLSafe。

关于Postman自动转换编码

Postman导出Swift代码时,会自动按照Basic Auth规则生成正确的编码逻辑,所以导出的代码会包含冒号拼接步骤,这也是它能正常适配请求的原因。

内容的提问来源于stack exchange,提问作者Antonio Labra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:01:17