如果使用cURL或Wget访问页面,则在PHP中检测

时间:2017-09-13 13:56:01

标签: php curl service wget

我有一个简单的PHP脚本,向用户显示一些信息。如果使用cURL请求相同页面或使用Wget保存,我想尽可能缩短此信息。

我在Stackoverflow上看到了几个类似的问题,但他们有一些额外的内容,如“I want to block cURL”或“重定向表单请求,如果......”。答案通常表明无法可靠地检测cURL请求,因为cURL允许用户更改所有请求参数并伪装成浏览器。多数民众赞成对我来说,我不想阻止cURL,我想为通用cURL(和Wget)请求提供额外的服务。

1 个答案:

答案 0 :(得分:3)

如果没有配置,否则cURL和Wget会为其请求使用自定义»用户代理«字符串。

例如curl/7.47.0Wget/1.17.1 (linux-gnu)。您可以在https://requestb.in上轻松测试。

多个应用程序可以访问请求标头中的用户代理字符串。在PHP中,它在$_SERVER['HTTP_USER_AGENT']变量中可用。

因此,要检测cURL或Wget请求并提供不同的内容,您可以使用

<?php

// Catch cURL/Wget requests
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/^(curl|wget)/i', $_SERVER['HTTP_USER_AGENT'])) {
    echo 'Hi curl user!';
}
else {
    echo 'Hello browser user!';
}

?>

在我的应用中,我检测到cURL请求,然后让进程die()进入if循环。因此,如果它只是一个浏览器,则条件不匹配并执行以下所有PHP代码。

如前所述,cURL和Wget都允许用户设置任意用户代理。但是对于所请求的服务,这个解决方案就足够了。