Excel Power Query调用API POST请求返回Bad Request问题排查
Power Query POST API返回Bad Request:复现Insomnia请求失败问题
尝试用Excel Power Query复现Insomnia中可正常运行的API POST请求,目前请求返回Bad Request。
可正常运行的Insomnia CURL请求
curl --request POST \ --url https://url.... \ --header 'Authorization: Bearer <<TOKEN VALUE>>' \ --header 'Content-Type: application/json' \ --data '{ "start":"2023-11-29", "end":"2023-11-29" }'
当前编写的Power Query代码
let Token = Excel.CurrentWorkbook(){[Name="Token"]}[Content]{0}[Column1], FromDate = Excel.CurrentWorkbook(){[Name="FromDate"]}[Content]{0}[Column1], ToDate = Excel.CurrentWorkbook(){[Name="ToDate"]}[Content]{0}[Column1], headers = [#"Authorization"="Bearer "&Token,#"Content-Type"="application/json"], postData = Json.FromValue([start = FromDate, end = ToDate]), Source = Json.Document(Web.Contents("https://url...", [Headers=headers, Content=postData])) in Source
问题排查与修复方案
1. 日期格式不匹配
Insomnia请求中日期是"2023-11-29"格式的字符串,但Power Query从Excel获取的日期是日期类型,Json.FromValue会自动将其转换为ISO标准格式(如"2023-11-29T00:00:00"),这可能导致API解析失败。
2. 令牌可能包含多余空格
从Excel命名区域获取的Token可能带有前后空格,会破坏Bearer授权头的格式。
修改后的Power Query代码
let Token = Text.Trim(Excel.CurrentWorkbook(){[Name="Token"]}[Content]{0}[Column1]), FromDate = Text.From(Excel.CurrentWorkbook(){[Name="FromDate"]}[Content]{0}[Column1], "yyyy-MM-dd"), ToDate = Text.From(Excel.CurrentWorkbook(){[Name="ToDate"]}[Content]{0}[Column1], "yyyy-MM-dd"), headers = [#"Authorization"="Bearer "&Token, #"Content-Type"="application/json"], postData = Json.FromValue([start = FromDate, end = ToDate]), Source = Json.Document(Web.Contents("https://url...", [Headers=headers, Content=postData])) in Source
修改说明
- 用
Text.Trim(Token)去除令牌前后的多余空格,确保授权头格式正确 - 用
Text.From(日期, "yyyy-MM-dd")将Excel日期转换为与Insomnia一致的字符串格式,保证JSON请求体中的日期符合API要求
内容的提问来源于stack exchange,提问作者Dawg99
相关产品推荐
相关产品推荐

