我在本地网络中有一个网站。它隐藏在登录名后面。我希望我的PHP代码进入该网站并复制其内容。内容没有立即发布,仅在1-3秒后加载。
我已经想出了如何通过cURL登录和复制网站。但是它仅显示立即发布的内容,而我瞄准的内容将在1-3秒后添加。
<?php
$url = "http://@192.168.1.101/cgi-bin/minerStatus.cgi";
$username = 'User';
$password = 'Password';
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0'));
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if(curl_errno($ch)){
//If an error occured, throw an Exception.
throw new Exception(curl_error($ch));
}
echo $response;
?>
输出为空表。而且,我希望他们会看到稍后在此网站上显示的数据。
答案 0 :(得分:1)
问题在于curl
仅发出HTTP请求并将响应正文返回给您。目标页面上的表可能使用JavaScript填充了asynchronously。您在这里有两个选择:
找出请求的资源,然后使用curl
直接获取它们。为此,请在浏览器中打开页面并检查developer tools for outgoing AJAX requests。一旦确定了实际加载的文件后,只需请求即可,而不是您的$url
。
使用模拟/无头浏览器执行JavaScript。如果由于某种原因第一个选项对您不起作用,则可以使用headless browser模拟真实用户浏览网站。这允许完整的JavaScript功能。对于PHP,有一个很棒的Symfony/Panther库,该库在后台使用了facebook webdriver,并且运行良好。这将比第一个解决方案更多的工作,因此请首先尝试。