如何用账号、密码及域通过Web.Contents获取数据替代Bearer令牌方式?
如何用账号密码自动获取Bearer Token并通过Web.Contents请求数据
完全可以通过账号、密码和域自动获取Bearer Token,替代手动从开发者工具复制的方式,核心是分两步走:先调用Token接口拿到凭证,再用凭证请求目标数据。你之前的尝试可能存在几个问题——比如用GET请求传密码(既不安全,多数API也不支持)、参数拼接格式有误,或者没正确解析返回的Token。
完整M代码示例
let // 配置登录信息,替换为你的实际内容 username = "你的用户名", password = "你的密码", domain = "你的域", tokenApiUrl = "https://目标域名/restapi/v1/token", // 替换为实际的Token接口地址 targetDataUrl = "你原来请求数据的目标URL", // 第一步:调用Token接口获取Bearer Token(以POST表单提交为例) tokenResponse = Web.Contents(tokenApiUrl, [ Headers = [#"Content-Type" = "application/x-www-form-urlencoded"], Method = "POST", Content = Text.ToBinary( "username=" & Uri.EscapeDataString(username) & "&password=" & Uri.EscapeDataString(password) & "&domain=" & Uri.EscapeDataString(domain) ) ]), tokenJson = Json.Document(tokenResponse), bearerToken = tokenJson[access_token], // 替换为Token接口返回中实际的Token字段名,比如有的是"token" // 第二步:用获取到的Token请求目标数据 dataResponse = Web.Contents(targetDataUrl, [ Headers = [ Authorization = "Bearer " & bearerToken, #"Content-Type" = "application/json" // 根据目标API要求调整Content-Type ], Timeout = #duration(0, 0, 0, 1), IsRetry = false ]), finalData = Json.Document(dataResponse) in finalData
关键注意点
- 必须用POST请求传递账号密码:GET请求会把密码暴露在URL中,极不安全,且绝大多数正规的Token接口都要求用POST提交认证信息
- 处理特殊字符:用
Uri.EscapeDataString处理用户名、密码、域中的特殊字符(比如&、空格、中文等),避免参数拼接出错 - 匹配Token接口的返回格式:不同API返回的Token字段名可能不同,比如有的是
token、bearer_token,要根据实际返回的JSON结构调整tokenJson[access_token]中的字段 - 适配目标API的Header要求:如果目标API有特定的Header要求(比如User-Agent),需要在请求目标数据的Headers中添加
内容的提问来源于stack exchange,提问作者Huong Giang
相关产品推荐
相关产品推荐

