如何伪造通过cron运行的php脚本的useragent


How to spoof useragent for a php script run through cron

我每30分钟通过cron运行一个PHP脚本,该脚本会在同一服务器上解析并保存我的网站的一些页面。我需要以Firefox或chrome用户代理的身份运行该脚本,因为解析的页面对CSS3样式有一些接口依赖。

我在我的脚本中尝试了这个:

curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13");

但依赖Firefox或Chrome的样式表没有加载它。我尝试了双引号和单引号。

我的问题是:是否有可能欺骗用户代理,让脚本通过服务器而不是浏览器运行,以及如何运行。

注意:我知道我对界面的浏览器依赖性很差。但我想知道这是否可能。

编辑

我的脚本在服务器上运行站点地图,并在站点地图中创建页面的html缓存。它不需要执行任何js或css文件。唯一的方法是欺骗useragent,使生成的缓存包含该浏览器的额外js和css文件,这些文件包含在头中。

你可以考虑我正在为所有浏览器类型生成缓存文件——IE、webkit和firefox。因此,我可以根据用户的浏览器将缓存文件提供给他们。此时,我将向所有用户提供相同的文件,即没有额外的css文件。

我想我需要将css文件硬编码到我的页面中,以便它始终包含在缓存中(不兼容的浏览器不会显示任何更改,但只会增加文件的数量)。无论如何,感谢

当您通过Cron运行php脚本时,其想法是它是一个脚本,而不是请求的网页。即使你可以欺骗用户代理,css和javascript也不会像在真正的网络浏览器中运行一样出色。cron的目的是运行脚本,原始脚本,例如执行文件操作。

好吧,首先我会查看您的用户代理标识。我认为这是不必要的复杂,尝试简单的Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

如果这不适用,那么您可以尝试将curl调用作为带有exec()的shell命令来执行。在这种情况下,您可能会遇到页面本身没有真正呈现的问题。您可以通过使用X虚拟帧缓冲区来解决此问题。这将使您的页面在内存中呈现,而不会显示任何屏幕输出,因此行为类似于浏览器。

你可以这样做:

exec("xvfb-run curl [...]");

您还可以使用ini_set('user_agent','your user agent')设置用户代理;也许这会对你有所帮助。