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

Android Retrofit Kotlin中URL斜杠双重编码致API请求400错误

解决URL编码重复导致的400错误问题

问题根源

你获取到的X-Amz-Credential=0XCA1HQW6NU67Z1FP3U1%2F20221011%2Fus-east-1%2Fs3%2Faws4_request中,%2F已经是斜杠(/)的URL编码结果。当你把这个值作为查询参数传递给下一个API时,请求库或框架会自动对所有特殊字符(包括%)再次编码,将%转为%25,最终%2F变成%252F,导致目标API无法识别正确的凭证格式,返回400错误。

可行解决方案

  • 先解码再传递
    在发送请求前,对拿到的凭证值做一次URL解码,把%2F还原成原始的/。之后让请求库自动编码,就能得到正确的%2F格式。
    Python示例:

    import urllib.parse
    
    # 从API获取的编码后凭证
    encoded_cred = "0XCA1HQW6NU67Z1FP3U1%2F20221011%2Fus-east-1%2Fs3%2Faws4_request"
    # 解码还原原始格式
    decoded_cred = urllib.parse.unquote(encoded_cred)
    # 此时decoded_cred为:0XCA1HQW6NU67Z1FP3U1/20221011/us-east-1/s3/aws4_request
    # 将解码后的值作为查询参数传入请求,库会自动把/编码为%2F
    
  • 手动构造查询字符串
    直接将拿到的完整凭证参数拼接进URL,跳过请求工具的自动编码逻辑。
    Python requests库示例:

    import requests
    
    credential_param = "X-Amz-Credential=0XCA1HQW6NU67Z1FP3U1%2F20221011%2Fus-east-1%2Fs3%2Faws4_request"
    # 手动拼接完整请求URL
    url = f"https://your-target-api.com?{credential_param}"
    response = requests.get(url)
    

    注意:如果还有其他查询参数,要确保它们已经正确编码,避免格式混乱。

  • 调整请求工具编码配置
    部分HTTP客户端工具支持关闭全局自动编码,或针对特定参数跳过编码。查看你使用工具的文档,找到对应配置,对X-Amz-Credential参数禁用自动编码。

内容的提问来源于stack exchange,提问作者Prasanth J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:55:15