如何在Ajax网站上使用file_get_contents函数

4
当您使用file_gets_contents($website)cURL加载网站时,它是否会加载整个网站?我主要关心使用cURL的情况。
我使用它来加载一个网页,然后使用AJAX获取一些内容(例如价格),但是在获取价格时出现了一些问题。
当我使用file_get_contents时,它是否像浏览器上一样正常加载整个网站以及使用Ajax加载的内容?

最好考虑一下你为什么需要它。没有完美的、百分之百无错误的解决方案。也许你需要先加载主页面,然后再加载价格部分?这似乎比创建虚拟环境执行JS更好、更稳定。 - Bogdan Burym
2个回答

4

不行。使用file_get_contents()只会返回页面内容,不会执行页面上的任何JavaScript代码。这种行为类似于在浏览器中查看页面源代码。


如何执行Javascript?我实际上正在使用cURL加载网站,但我提到了file_get_contents(),因为它是最常用的。我已经编辑了问题。 - William The Dev
请看这个问题。基本上,您需要以编程方式模拟浏览器环境,该环境了解如何解析和执行JavaScript。 - plasmid87
@plasmid87 有没有纯PHP的库?也就是说......没有使用其他语言编写的代码。 - William The Dev
正如@SteAp在他的回答中提到的那样,有V8 JavaScript引擎。个人而言,如果我处于您的位置,我会尝试手动识别页面中的AJAX调用,确定值应该显示在哪里,然后从您的服务器向AJAX端点发出调用。然后,您可以在服务器上插入得到的HTML中的值。 - plasmid87

0

代码片段

$website = 'http://stackoverflow.com/';
file_gets_contents($website)

仅加载HTTP请求的结果,没有其他内容。因此,该调用会加载由URL http://stackoverflow.com/返回的html页面的源代码。

特别地,file_gets_contents() 不会加载页面引用的内容,该页面指向http://stackoverflow.com/

使用PHP评估JavaScript代码

如果您想要在使用PHP脚本的HTML代码中评估JavaScript,您可能希望使用V8 JavaScript engine,它需要编译到您的PHP二进制文件中:

在这里找到一个如何使用V8 JavaScript引擎的示例


那么它不会加载整个文档加载完成后JavaScript或JQuery加载的任何内容($(document).ready()))? 它会像浏览器未加载JavaScript一样加载网站?对吗? - William The Dev
1
没错!file_gets_contents() 获取HTTP响应。由于响应没有经过浏览器,因此不会执行任何JavaScript代码。 - SteAp
相同的功能。更多或更少所有这些东西都会加载纯页面。 - SteAp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接