【问题标题】:Does Axios have the ability to detect redirects?Axios 有检测重定向的能力吗?
【发布时间】:2019-09-19 10:07:36
【问题描述】:

Response interface of the Fetch API 有一个read-only flagredirected,表示响应是否是重定向请求的结果。

axios 库是否具有类似的功能?我能找到的最好的是maxRedirects,它设置了要遵循的最大重定向数。但是,我只是想确定它是否发生(所以我可以专门处理重定向),而不是阻止它发生。

【问题讨论】:

  • 验证响应状态是否反映了重定向还不够?
  • 所以重定向的响应状态是200,但是是假的。我需要确定它是否是合法的 200。 Network 选项卡包含 302 和 200 请求,但 fetch/axios 调用在处理响应时仅显示 200

标签: javascript axios fetch response.redirect


【解决方案1】:

将您代码中的请求 URL 与 response.request.responseURL 给出的 URL 进行比较;如果不相等,您就知道请求被重定向了。

状态码为 200 是规范要求的;无论您使用哪种 API,都不会向浏览器中运行的前端 JavaScript 公开中间状态代码。另请参阅http://stackoverflow.com/a/46031800/441757的答案

【讨论】:

  • -1 :据我所知,axios 公开的response 没有url 成员,这使得这完全不是问题的答案。 github.com/axios/axios#response-schema
  • 相信你想要的值会暴露在response.request.responseURL
  • 请记住 response.request.responseURL 在使用 Internet Explorer 11 时不可用,至少在 axios v.0.20.0 中不可用。
  • 在我的情况下'response.request.res.responseUrl'有效
  • 根据文档:“request 是生成此响应的请求。它是 node.js 中的最后一个 ClientRequest 实例(在重定向中)和浏览器中的 XMLHttpRequest 实例”。因此,如果您在浏览器或节点中检查请求,可能会存在差异,并且 nodejs 版本之间也可能存在差异。检查您的环境/版本的文档。
【解决方案2】:

您可以获得重定向计数:

const response = await axios.get('http://someurlthatredirects.com');
console.log(response.request._redirectable._redirectCount);

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 2023-01-13
    • 2016-02-11
    • 2010-09-21
    • 1970-01-01
    • 2011-09-25
    • 2022-12-20
    • 2013-07-28
    • 2021-02-21
    相关资源
    最近更新 更多