3

我使用 PHP 在 DOM 树中加载网站。有没有办法修改使用发送的用户代理DOMDocument::loadHTMLFile()

function parseThis($url)
{
  $html = new DOMDocument();
  $html->loadHtmlFile( $url );

  return $html
}
4

2 回答 2

11

更改 中的user_agentphp.ini,该值应该在任何使用 http 流包装器的东西中发送,例如DOMDocument::loadHtmlFile(), file_get_contents()等。

$fake_user_agent = "Mozilla/5.0 (X11; Linux i686) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11";
ini_set('user_agent', $fake_user_agent);

如果您的服务器配置允许,也可以.htaccess通过设置在 Apache 中完成相同的操作。php_value user_agent

于 2012-07-15T22:10:43.397 回答
4

好吧,我认为最好的方法是以不同的方式检索内容并在之后加载文档。您可以使用 cURL 来做到这一点。

$useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";

$ch = curl_init();

// set user agent
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HEADER, 0);

// grab content from the website
$content = curl_exec($ch);

// load the content in your dom
$html = new DOMDocument();
$html->loadHTML($content);
于 2012-07-15T22:11:59.893 回答