【问题标题】:How do I detect with JavaScript or JQuery whether a URL points to a web page or a binary file?如何使用 JavaScript 或 JQuery 检测 URL 是指向网页还是二进制文件?
【发布时间】:2018-04-22 11:15:46
【问题描述】:

我正在使用 javascript 和 jquery 抓取网页或大型二进制文件(PPT 等)的链接的网页列表。

如何检测内容是否为网页('text/html')?我很确定它正在使用 $.ajax 查看 HTTP 标头,并且我知道有一些类似的已发布问题,但我找不到适合这个特定问题的示例。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

您可以检查 url 的扩展 - 最简单的方法。 或者你可以试试ajax解决方案

var url = 'someurl';
var xhttp = new XMLHttpRequest();
xhttp.open('HEAD', url);
xhttp.onreadystatechange = function () {
  if (this.readyState == this.DONE) {
    console.log(this.status);
    console.log(this.getResponseHeader("Content-Type"));
  }
};
xhttp.send();

【讨论】:

  • 谢谢@Mateusz-Kudej,这正是我要找的代码!
  • 很高兴为您提供帮助 ;) @El-Jus
【解决方案2】:

您无法可靠地从 URL 推断出类型,因为它可能包含像 exehtml 这样的扩展名,但不是必须的,如果有,也不能保证。

在不完全下载和检查文件的情况下,最接近的可能是向 URL 发送 HEAD HTTP request。这应该返回没有正文的响应标头,而正文应该包含Content-Type header。不过,这一切都取决于后端的实现和配置,因此不能保证请求会得到正确响应,甚至根本不会得到响应。

【讨论】:

  • 感谢@Timo 提供关于假设文件扩展名是真实的指导,非常感谢。
【解决方案3】:

如果你有文件名,你可以使用 filename.split('.').pop() 这将返回文件的扩展名。

【讨论】:

  • 是的,会出什么问题?开个玩笑,如果链接 url 实际上不包含文件名怎么办?例如,某些 CMS 不会在 URL 中公开实际文件名
  • 并非总是如此,这就是我的观点。它本身并不是糟糕的代码,它只是针对不完整需求的不完整解决方案。
猜你喜欢
  • 2015-04-05
  • 2012-04-30
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 2012-02-05
  • 2013-01-15
  • 2011-11-21
相关资源
最近更新 更多