为什么 ini_get('user_agent') 不能与 php 中的 file_get_contents() 一起使用?

Why does ini_get('user_agent') doesn't work with file_get_contents() in php?

我有这样的情况。

  1. 爬虫脚本使用 URL 获取内容 file_get_contents().

  2. 它将用户代理设置为 "CrawlerBot" 在调用 file_get_contents() 的行上方使用 ini_set('user_agent').

我担心的是,当我在 URL 的代码中写入 ini_get('user_agent') 时,它得到一个空白值。但是,当我使用 $_SERVER['HTTP_USER_AGENT'] 时,它会检测到正确的用户代理。这两个文件都托管在同一台服务器上。

有人知道为什么会这样吗?

那不是 ini_get() 所做的。它用于检索服务器配置值(服务器的配置),而不是请求特定的值,例如请求 browser/script/whatever.

发送的用户代理

因此,您可以使用 ini_get() 找出为您的服务器发出的请求设置的用户代理值(如果有的话),就像您一样实际上制作。您不能使用它来找出向您的服务器发出的请求的用户代理

这是设置用户代理和使用 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:我强烈建议您在上下文中设置超时和最大可接受的重定向以避免应用程序变慢。