Как вы программно узнаете общее количество HTTP-запросов для данного URL в PHP? - PullRequest
3 голосов
/ 21 августа 2011

Существует ли простой способ сделать это, не анализируя весь ресурс, на который указывает URL, и не обнаруживая различные типы контента (изображения, файлы JavaScript и т. Д.), Связанные с этим URL?

Ответы [ 2 ]

4 голосов
/ 21 августа 2011

Просто несколько быстрых мыслей для вас.

  1. Вы должны знать, что кэширование и различия в способах, которыми браузеры, подчиняются и не подчиняются директивам кэширования, могут приводить к различным запросам ресурсоввозможно, стоит подумать, сгенерированные для одной и той же страницы разными браузерами в разное время.

  2. Если целью вашего проекта является просто измерить эту метрику и вы можете контролировать веб-сайт ввопрос вы можете передать каждый ресурс через php-прокси, который может считать запросы.то есть вы можете следовать этому шаблону для ssi, скриптов, стилей, шрифтов, чего угодно.

  3. Если пункт 2 невозможен из-за характера вашего веб-сайта, но у вас есть доступ, то как насчет анализа журнала HTTP?Я полагаю, что это будет просто по сравнению с попыткой разобрать html / php файл, но может быть очень медленным.

  4. Если у вас нет доступа к веб-сайту / http-журналам, тогда я сомневаюсь, что вы могли бы сделать это с любой реальной точностью, огромным объемом работы, но вы могли бы использовать curl, чтобы получить исходный HTML, а затем проанализировать в соответствии с инструкциями DaveRandom.

Надеюсь, что-то в этом поможет вам.

3 голосов
/ 21 августа 2011

EDIT

Это легко сделать, используя 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 и будут игнорироваться.
  • Вам придется анализировать любые документы CSS и искать ресурсы, включенные в объявления CSS (например, background-image:). Эти ресурсы также необходимо проверить на предмет дублирования в src / hrefs в первоначальном документе.
  • Вот действительно сложный вопрос - вам придется искать ресурсы, динамически добавляемые в документ при загрузке через Javascript. Например, один из способов использования Google AdWords - это аккуратный JS, который динамически добавляет новый элемент <script> в документ, чтобы получить реальный сценарий от Google. Для этого вам нужно будет эффективно оценить и выполнить Javascript на странице, чтобы увидеть, генерирует ли он какие-либо новые запросы.

Итак, вы видите, это будет нелегко. Я подозреваю, что на самом деле может быть проще найти исходный код браузера и изменить его. Если вы хотите попробовать и предложить решение на основе PHP, которое дает точный ответ, будьте моим гостем (возможно, вы даже сможете продать что-то настолько сложное), но, честно, спросите себя: действительно ли у меня так много? время в моих руках?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...