如何使用 Jessengers/Agent 包修改 Laravel 中间件以允许 cURL 访问?

问题描述 投票:0回答:1

我在 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.
    }
}
php laravel curl user-agent laravel-10
1个回答
0
投票

基于文档 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';
}
© www.soinside.com 2019 - 2024. All rights reserved.