有沒有一種簡單的方法來做到這一點,而無需解析URL指向的整個資源,並找出鏈接到該URL內的不同內容類型(圖像,JavaScript文件等)?如何以編程方式查找PHP中給定URL的HTTP請求總數?
3
A
回答
3
編輯
此使用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的解決方案,並提供一個準確的答案作爲我的客人(你甚至可以銷售像這樣複雜的東西),但老實說,問問你自己 - 我真的有這麼多時間在我手上?
4
只是一些快速的想法給你。
你應該知道,高速緩存,並在方式上存在差異,其中瀏覽器,服從和不服從的緩存指令可能會導致在同一頁產生不同的資源請求,通過在不同的時間不同的瀏覽器,可能是值得考慮。
如果您的項目的目的僅僅是衡量這一指標,並且您有權控制相關網站,則可以通過可以計數請求的php代理傳遞每個資源。即你可以按照這個模式來使用ssi,腳本,樣式,字體,任何東西。
如果由於您的網站的性質而導致第2點不可能,但您有權訪問,那麼解析HTTP日誌怎麼樣?我想這會比試圖解析一個html/php文件簡單,但可能會很慢。
如果你沒有訪問網站的源/ http日誌,那麼我懷疑你可以做到這一點與任何真正的準確性,涉及大量的工作,但你可以使用curl來獲取最初的HTML,然後根據DaveRandom的說明進行解析。
我希望這件事對你有幫助。
相關問題
- 1. 如何以編程方式發送帶請求的HTTP請求?
- 2. 如何以編程方式查找傳入http請求的地理位置?
- 3. 如何以編程方式在ASP.NET中請求URL?
- 4. 如何查找HTTP請求?
- 5. 如何以編程方式檢索URL的總數Google + 1的
- 6. 如何以編程方式查找javac.exe?
- 7. Xcode/Objective-c - 如何以編程方式查找給定方法的調用者
- 8. 如何查找您要查找的數據的請求URL?
- 9. 如何以編程方式查找EJB的JNDI查找名稱?
- 10. 如何查找當前請求的Url?
- 11. Yammer以編程方式拒絕請求
- 12. Ansible:以編程方式請求通過
- 13. 以編程方式停止請求
- 14. 如何從給定的SOAP Web服務的請求XML中查找WSDL URL?
- 15. 以編程方式請求特定的顯示方向?
- 16. 如何以編程方式返回200 ok狀態到PHP中的ajax請求?
- 17. 給定標題 - 以編程方式在PHP中獲取mediawiki頁面的URL
- 18. 在HTTP請求中禁用URL編碼
- 19. 如何在Silverlight中以編程方式訪問特定的URL?
- 20. 你如何找到了HTTP POST請求的URL中的ActionResult
- 21. 如何編寫測試以在ruby中指定http請求的格式?
- 22. 如何以編程方式查找文件的編碼?
- 23. 如何以編程方式自動化後續請求語句?
- 24. Gae MapReduce。如何以編程方式發送發佈請求
- 25. 如何在Wordpress中以編程方式重定向URL?
- 26. 以編程方式將Tomcat中的請求URL列入白名單
- 27. 如何以編程方式註冊自定義URL方案?
- 28. 如何在iexplore.exe中以編程方式查找?
- 29. 以編程方式查找地區
- 30. 以編程方式查找GridView行
偉大的答案,詳細解析HTML和它的所有相關資產解析的複雜性質。 – Gavin