我有这样的情况。
抓取工具脚本使用获取URL的内容
file_get_contents()
。
它将用户代理设置为“CrawlerBot”
在使用file_get_contents()
的行之上
ini_set('user_agent')
。
我担心的是当我在URL代码中写ini_get('user_agent')
时,它会得到一个空值。但是,当我使用$_SERVER['HTTP_USER_AGENT']
时,它会检测到正确的用户代理。这两个文件都托管在同一台服务器上。
有人知道为什么会这样吗?
答案 0 :(得分:1)
那不是ini_get()
所做的。它用于检索服务器配置值(服务器的配置),而不是请求特定的值,例如请求的浏览器/脚本/其他任何内容发送的用户代理。
因此,您可以使用ini_get()
找出为服务器发出的请求设置的用户代理值(如果有),就像您实际制作的那样。您无法使用它来查找到您的服务器的请求的用户代理。
答案 1 :(得分:0)
以下是设置用户代理并使用file_get_contents检索资源的代码示例。
//Set uri
$uri = 'http://example.com';
//Init context
$ctx = stream_context_create(
array(
'http' => array(
'user_agent' => 'MySuperAgent/3.0'
)
)
);
//Try to retrieve content
if (($data = file_get_contents($uri, false, $ctx)) === false) {
die('file_get_contents error');
}
ps:请注意,即使对于https资源,上下文数组也应该在http键下。
ps2:我强烈建议您在上下文中设置超时和最大可接受重定向,以避免应用程序速度变慢。