では、クライアントがカールしているかどうかをcodeigniterを使用して確認し、それに対して別のものを返すにはどうすればよいですか?
CURLを使用すると、ユーザーエージェントを偽造できるため、cURLリクエストであることがわかっているときに送信されるユーザーエージェントによっては意味がありません。
例:最近、GoogleからURLのページランクを取得するアプリを作成しました。現在、Googleはこれを好まないため、特定のユーザーエージェントのみがページランクサーバーにアクセスすることを許可しています。解決? cURLとGoogleを使用してユーザーエージェントを偽装することは賢明ではありません。
話の教訓:cURLユーザーエージェントは信頼できないだけです。
それでもこれを実行したい場合は、通常と同じように、渡されたユーザーエージェントを取得できるはずです。
$userAgent=$_SERVER['HTTP_USER_AGENT'];
[〜#〜]編集[〜#〜]簡単なテストでこれが証明されました:
dumpx.php:
<?php
$url="http://localhost/dump.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
if($_GET['u']==y) {
curl_setopt($ch, CURLOPT_USERAGENT, "booyah!");
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 0);
$exec=curl_exec ($ch);
?>
dump.php:
<?php
var_dump($_SERVER);
?>
ケース1: http://localhost/dumpx.php?u = y
'HTTP_USER_AGENT' => string 'booyah!' (length=7)
ケース2: http://localhost/dumpx.php?u = n
いいえ$ _SERVER ['HTTP_USER_AGENT']
これは、curlのデフォルトのユーザーエージェントがないことを証明しています。リクエストヘッダーでそれを渡さないだけです。
ボットを検出したい場合は、ユーザーエージェントに頼ることはできません。ベストプラクティスは次のとおりです。
cURLは-ClientURL Libraryの略であり、その要点は、クライアントが行うものと同じリクエストを行えるようにすることです。
実行できるのは、IPアドレス、HTTPリクエストヘッダー、Cookie /セッションIDCookie、URL(パス/ページ)、投稿/取得データなど、リクエストの一部である情報を検出することだけです。 curlを使用してリクエストを行う人が、予想されるIPアドレスからリクエストを実行し、予想されるヘッダー/ cookie /トークン/ URL/post/get値を提供している場合、curlリクエストを作成するブラウザーと区別することはできませんリクエスト。
spoofを使用するか、cURLを使用するときにカスタムユーザーエージェントヘッダーを設定できるため、信頼性が低くなります。
それ以外の場合は、これを行うことができます:
if(strtolower($this->input->server('HTTP_USER_AGENT', true)) == 'curl')
{
// Is using cURL
}
これは、cURLリクエストのユーザーエージェントヘッダーにcurl
が含まれている場合にのみ発生します。
私の知る限り、curlリクエストを実行するときにデフォルトのユーザーエージェントが設定されていません。