pix*_*ets 3 php service curl wget
我有一个简单的 PHP 脚本,它向用户显示一些信息。如果使用 cURL 请求同一页面或使用 Wget 保存同一页面,我想尽可能地缩短此信息。
我在 Stackoverflow 上看到了几个类似的问题,但他们有一些额外的问题,比如“我想阻止 cURL ”或“如果……重定向表单请求”。答案通常表明不可能可靠地检测 cURL 请求,因为 cURL 允许用户更改所有请求参数并假装是浏览器。对我来说没关系,我不想阻止 cURL,我想为通用 cURL(和 Wget)请求提供额外的服务。
如果未配置,则 cURL 和 Wget 使用自定义 »User Agent« 字符串来处理它们的请求。
例如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!';
}
?>
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我检测到 cURL 请求,然后让进程die()进入if循环。因此,如果它只是一个浏览器,则条件不匹配并执行以下所有 PHP 代码。
如前所述,cURL 和 Wget 都允许用户设置任意用户代理。但是对于请求的服务,这个解决方案就足够了。
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |