我有一个简单的PHP脚本,向用户显示一些信息。如果使用cURL请求相同页面或使用Wget保存,我想尽可能缩短此信息。
我在Stackoverflow上看到了几个类似的问题,但他们有一些额外的内容,如“I want to block cURL”或“重定向表单请求,如果......”。答案通常表明无法可靠地检测cURL请求,因为cURL允许用户更改所有请求参数并伪装成浏览器。多数民众赞成对我来说,我不想阻止cURL,我想为通用cURL(和Wget)请求提供额外的服务。
答案 0 :(得分:3)
如果没有配置,否则cURL和Wget会为其请求使用自定义»用户代理«字符串。
例如curl/7.47.0
或Wget/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都允许用户设置任意用户代理。但是对于所请求的服务,这个解决方案就足够了。