使用 Web.Contents 处理状态代码

Web.Contents 函数具有某个用于处理某些 HTTP 状态代码的内置功能。 可以使用选项记录中的 ManualStatusHandling 字段在扩展中替代默认行为。

自动重试

Web.Contents 将自动重试失败并且具有以下状态代码之一的请求:

代码 Status
408 请求超时
429 请求过多
503 服务不可用
504 网关超时
509 超出带宽限制

在失败之前,最多将重试三次请求。 引擎使用指数退避算法来确定等到下一次重试的时长,除非响应包含 Retry-after 标头。 找到标头后,引擎将等待指定的秒数,然后进行下一次重试。 支持的最短等待时间为 0.5 秒,最大值为 120 秒。

注意

Retry-after 值必须采用以下 delta-seconds 格式。 目前不支持 HTTP-date 格式。

身份验证异常

以下状态代码将导致凭据异常,并导致出现身份验证提示,请求用户提供凭据(或在 OAuth 令牌过期的情况下再次登录)。

代码 Status
401 未授权
403 已禁止

注意

扩展可以使用状态代码为 401 和 403 的 ManualStatusHandling 选项,这在自定义数据连接器之外(即直接从 Power Query)进行的 Web.Contents 调用中无法实现。

重定向

以下状态代码将导致自动重定向到 Location 标头中所指定的 URI。 缺少 Location 标头将导致错误。

代码 Status
300 多选
301 已永久移动
302 已找到
303 参见其他
307 临时重定向

注意

只有状态代码 307 才将保留 POST 请求方法。 所有其他重定向状态代码都将导致切换到 GET