【问题标题】:How would you programmatically find out the total number of HTTP requests for a given URL in PHP?您将如何以编程方式找出 PHP 中给定 URL 的 HTTP 请求总数?
【发布时间】:2011-10-31 09:33:37
【问题描述】:

是否有一种简单的方法可以做到这一点,而无需解析 URL 指向的整个资源并找出链接到该 URL 内的不同内容类型(图像、javascript 文件等)?

【问题讨论】:

    标签: php http url


    【解决方案1】:

    编辑

    使用PhantomJS 可以轻松实现这一点,它比 PHP 更接近于正确的工作工具。


    原答案 (稍作修改)

    要有效地做到这一点需要这么很多工作,我怀疑这是否值得。

    在我看来,您必须使用类似 DOMDocument::loadHTML() 的东西来解析 HTML 文档,并查找所有 src=href= 属性并解析它们。听起来比较简单,我知道,但是有几千个潜在的绊脚点。以下是我的一些想法:

    • 首先,您必须检查初始请求的资源是否确实 HTML 文档。这可能就像查看响应的 Content-Type: 标头一样简单,但如果服务器在这方面的行为不正确,您可能会得到错误的答案。
    • 您必须检查可能未以相同方式指定的重复资源(如重复图像等) - 例如如果您从example.com 读取的文档位于/dir1/dir2/doc.html 并且它使用图像/dir1/dir3/img.gif,则文档中的某些地方可能会称为/dir1/dir3/img.gif,有些地方可能是http://www.example.com/dir1/dir3/img.gif 和某些地方可能是../dir3/img.gif - 您必须认识到这是一种资源,并且只会产生一个请求。
    • 您必须注意浏览器特定的内容(例如<!--[if IE])并决定是否要将这些块中包含的资源包括在总数中。这也会给使用 XML 解析器带来一个新问题,因为<!--[if IE] 块在技术上是有效的 SGML cmets,并且会被忽略。
    • 您必须解析任何 CSS 文档并查找包含在 CSS 声明中的资源(例如 background-image:)。还必须根据初始文档中的 src/href 检查这些资源是否重复。
    • 这是一个非常困难的问题 - 您必须寻找通过 Javascript 在加载时动态添加到文档中的资源。例如,您可以使用 Google AdWords 的一种方法是使用简洁的 JS 动态添加新的 <script> 元素到文档中,以便从 Google 获取实际脚本。为此,您必须有效地评估和执行页面上的 Javascript 以查看它是否会生成任何新请求。

    所以你看,这并不容易。我怀疑获取浏览器的源代码并对其进行修改实际上可能更容易。如果您想尝试提出一个基于 PHP 的解决方案,该解决方案可以提供准确的答案,请成为我的客人(您甚至可以出售如此复杂的东西),但老实说,问问自己 - 我真的有那么多吗?时间在我手上?

    【讨论】:

    • 很好的答案,详细说明了解析 HTML 及其所有相关资产的复杂性。
    【解决方案2】:

    只是给你一些快速的想法。

    1. 您应该意识到缓存以及浏览器遵守和不遵守缓存指令的方式的差异可能会导致不同浏览器在不同时间为同一页面生成不同的资源请求,这可能是值得的考虑。

    2. 如果您的项目的目的只是衡量此指标,并且您可以控制相关网站,则可以通过可以计算请求数的 php 代理传递每个资源。即你可以按照这个模式来处理 ssi、脚本、样式、字体等等。

    3. 如果第 2 点由于您网站的性质而无法实现,但您可以访问,那么如何解析 HTTP 日志?与尝试解析 html/php 文件相比,我想这会很简单,但可能会很慢。

    4. 1234563然后按照 DaveRandom 的说明进行解析。

    我希望本文中的某些内容对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-02-02
      • 2010-11-21
      • 2023-04-02
      • 1970-01-01
      • 2016-10-29
      • 2011-08-21
      • 2017-01-03
      • 1970-01-01
      • 2011-08-25
      相关资源
      最近更新 更多