我在 Laravel 项目中使用 Jessengers/Agent 包进行用户代理解析,并且我有一个当前拒绝访问机器人的中间件 (BotMiddleware)。但是,我想修改它以允许 cURL 请求访问。中间件使用 Jessengers/Agent 包检查请求是否来自机器人。如何调整中间件以专门允许 cURL 请求?
这是我现有的中间件代码:
public function handle(Request $request, Closure $next)
{
$agent = new Agent();
// Check if the request comes from a bot
if ($agent->isRobot()) {
return response('Bot detected, access denied', 403);
}
return $next($request);
}
我尝试修改中间件,但我不确定如何根据 User-Agent 标头正确识别 cURL 请求。任何有关如何实现这一目标的帮助或建议将不胜感激。
我也尝试过,但没有成功:
class BotMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
$agent = new Agent();
// Check if the request comes from cURL
if ($this->isCurlRequest($request)) {
return $next($request);
}
// Check if the request comes from a bot
if ($agent->isRobot()) {
return response('Bot detected, access denied', 403);
}
return $next($request);
}
/**
* Check if the request comes from cURL.
*
* @param \Illuminate\Http\Request $request
* @return bool
*/
private function isCurlRequest(Request $request)
{
return $request->header('User-Agent') === 'curl';
// Adjust the condition based on the actual User-Agent header value of your cURL requests.
}
}
基于文档 https://laravel.com/docs/10.x/requests#request-headers 您可以检查请求是否包含给定的标头及其值:
dd($request->hasHeader('User-Agent'), $request->header('User-Agent');
现在你可以像这样更新 isCurlRequest
private function isCurlRequest(Request $request)
{
return $request->hasHeader('User-Agent') && $request->header('User-Agent') == 'curl';
}