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

Power BI调用Totvs API(带Basic认证与请求体)出现500错误

Power BI通过Basic认证调用Totvs API连接失败解决方案

问题背景

在Power BI中使用M语言通过账号密码的Basic认证调用Totvs API时,无法建立连接,但相同请求在Postman中可正常运行。用户曾尝试修改请求头为Accept-Charset或Accept,问题未解决。

原M语言代码

= let apiUrl = "(censored)",
body = Text.ToBinary("
{
    ""codEmitenteIni"": 000000,
    ""codEmitenteFin"": 999999,
    ""tipoRelatorio"": ""detalhado""
}
"),
result = Json.Document(Web.Contents(apiUrl,[Headers=[#"Authorization"="Basic login:password"], Content=body]))
in
result

错误信息

DataSource.Error: '[...]' (500) or return a HTML login page

核心问题与修正方案

1. Basic认证格式错误

Basic认证要求将login:password进行Base64编码后,再拼接Basic 前缀,原代码直接使用明文是错误的。

2. 请求体与请求头优化

直接用Text.ToBinary构造JSON可能存在格式问题,改用Json.FromValue能确保JSON结构合规;同时需添加Content-Type: application/json头,明确请求体类型。

修正后的代码

let
    apiUrl = "(censored)",
    // 对账号密码做Base64编码
    authStr = "login:password",
    encodedAuth = "Basic " & Binary.ToText(Text.ToBinary(authStr), BinaryEncoding.Base64),
    // 用Json.FromValue构造标准JSON请求体
    body = Json.FromValue([
        codEmitenteIni = 000000,
        codEmitenteFin = 999999,
        tipoRelatorio = "detalhado"
    ]),
    // 发起请求,补充必要请求头
    result = Json.Document(Web.Contents(apiUrl, [
        Headers = [
            #"Authorization" = encodedAuth,
            #"Content-Type" = "application/json"
        ],
        Content = body
    ]))
in
    result

额外排查建议

  • 对齐Postman请求头:打开Postman的请求详情,复制所有请求头(如User-Agent、Accept等)到Power BI的Headers参数中,确保请求环境完全一致。
  • 调整Power BI隐私设置:若API是内部资源,在Power BI的「数据源设置」-「隐私」中,将该数据源设置为「组织」级别,避免跨源权限拦截。
  • 检查API端点权限:确认Power BI使用的账号拥有该Totvs API的访问权限,避免因权限不足返回500错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:23:12