, если вы имеете в виду libcurl
, я уверен, что ответ отрицательный, он не добавляет идентификационной информации в свои запросы по умолчанию.
если вы имеете в виду curl
, да, это легко. UserAgent по умолчанию локон/versionumber (в моей системе прямо сейчас его curl/7.52.1
)
if(1===preg_match('/^curl\/[\.\d]+/',$_SERVER['HTTP_USER_AGENT']??'')){
//curl's user-agent string. probably curl
} else {
//could be anything (including curl, perhaps with a masked user-agent)
}
регулярное выражение может быть даже излишним, может быть, вы могли бы просто сделать 0===strpos('curl/',$_SERVER['HTTP_USER_AGENT']??'')
интересное замечание, что завиток не будет выполнять JavaScript , поэтому, если вы добавите тег ввода (скрытый?) с javascript, завиток проигнорирует его. как jsInputTag=document.createElement("input");jsInputTag.setAttribute("name","jsInputTag");document.getElementById("form").appendChild(jsInputTag);
локон не добавит jsInputTag в виде (ничто не мешает программисту добавлять его вручную, хотя.)
, но опять же, многие параноидальные люди не работают JavaScript на своих браузерах либо, и у большинства браузеров есть возможность отключить его.
Кстати, если это проблема X-Y, и вам действительно нужна защита от автоматических скриптов, вы должны использовать капчу, а не пытаться обнаружить завиток. например: ReCaptcha
Определить «нормальный». – CBroe
Запрос POST, инициированный браузером клиента, а не отправленный через cURL с сервера? – Mirian
Нет ничего «ненормального» ни о том, ни о другом. И если через cURL кто-то отправит одни и те же заголовки запросов в качестве браузера, тогда вы не сможете различить их между собой (из-за их _identical_). В большинстве случаев вы можете проверить типичные заголовки/значения, отправляемые браузером (например, User-Agent, различные заголовки Accept ... заголовки и т. Д.) И на основе этой попытки и угадывать (!), Если вы имеете дело с реальным браузером или нет. – CBroe