Единственный способ поймать большинство «автоматических» запросов - это кодировать в логике, которая выявляет действия, которые не могут быть людьми с браузером.
Например, слишком быстрое попадание на страницы, слишком быстрое заполнение формы, наличие внешнего источника в html-файле (например, поддельный файл css через php-файл) и проверка, загрузил ли запрашивающий IP его в предыдущий этап вашего сайта (вроде обратного приманки), но вам нужно будет исключить блокировку определенных IP-адресов / пользовательских агентов, иначе вы заблокируете веб-сайты Google. и т.д.
Это, вероятно, единственный способ сделать это, если curl (или любой другой автоматизированный скрипт) подделывает свои заголовки, чтобы выглядеть как браузер.