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

Textlocal短链接API对接Cloud Storage签名URL出现MalformedSecurityHeader报错

问题排查结论

核心原因是云存储签名URL被二次URL编码,导致重定向后的请求参数不符合云存储的安全校验规则,触发MalformedSecurityHeader错误:

  • 你传入shorten_url的云存储签名URL本身已经是经过URL编码的合法链接,包含X-Goog-Signature/X-Amz-Signature这类带特殊字符的签名参数,以及%编码的保留字符
  • 你使用urllib.parse.urlencode处理请求参数时,会自动对传入的url参数值做二次编码,把原URL里的&、%、=等关键字符转义,导致最终Textlocal短链接绑定的目标URL结构被破坏,云存储收到请求后无法识别合法的签名头/参数,返回安全校验错误
  • 普通链接因为没有复杂的编码后签名参数,即使二次编码大部分场景下也能被正常解析,所以不会报错
修复方案

调整shorten_url函数里的参数编码逻辑,避免对目标URL做二次编码,指定urlencode的safe参数,保留URL原生的特殊分隔符即可:

import urllib.parse
import urllib.request
import ssl
import certifi

def shorten_url(apikey, url):
    # 添加safe参数,保留URL原生的分隔字符不被转义
    data =  urllib.parse.urlencode({'apikey': apikey, 'url': url}, safe=':/?&=%')
    data = data.encode('utf-8')
    request = urllib.request.Request("https://api.textlocal.in/create_shorturl/")
    f = urllib.request.urlopen(request, data, 
    context=ssl.create_default_context(cafile=certifi.where()))
    fr = f.read()
    return(fr)
验证步骤
  • 调用修复后的接口生成短链接后,先在浏览器开发者工具的网络面板查看短链接的301/302重定向目标地址,确认和你传入的原始签名URL完全一致
  • 如果仍有报错,检查Textlocal API是否存在URL长度限制,部分云存储签名URL长度可能超过短链接服务商的参数上限,可以在提交请求前先打印完整的请求body确认参数完整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:57:03