2017-09-13 9 views
0

私は、ユーザにいくつかの情報を示す簡単なPHPスクリプトを持っています。同じページがcURLでリクエストされているか、Wgetで保存されている場合は、この情報をできるだけ短くしたいと思います。ページがcURLまたはWgetでアクセスされた場合のPHPでの検出

私はStackoverflowに関するいくつかの同様の質問を見ましたが、 "I want to block cURL"や "...のようなフォーム要求をリダイレクトする"のようないくつかの追加があります。通常、cURLを使用すると、すべてのリクエストパラメータを変更してブラウザであるとふれることができるため、cURLリクエストを確実に検出することはできません。大したことはありません。私はcURLをブロックしたくありません。一般的なcURL(とWget)リクエストに対して特別なサービスを提供したいと思います。

+0

ユーザーがスマートに自動化することができれば、その目的のために別のURLを指定してください。つまり、APIを提供することによって人間が消費するページとソフトウェアを消費するページとを分離する。 –

+0

彼は十分にスマートである必要はありません;)例のサービスはifconfig.io→ブラウザによるリクエストです:たくさんの情報。 cURL経由でリクエスト:IPアドレスのみ。私は同じ役に立つ行動をしたい。 – pixelbrackets

答えて

2

これ以外の方法で設定しないと、cURLとWgetは要求に対してカスタム»ユーザーエージェント«文字列を使用します。

たとえばcurl/7.47.0またはWget/1.17.1 (linux-gnu)です。このeasiliyはhttps://requestb.inでテストできます。

いくつかのアプリケーションが要求ヘッダーのユーザーエージェント文字列にアクセスすることがあります。 PHPでは$_SERVER['HTTP_USER_AGENT']変数で利用できます。

だから、cURLのか、Wgetの要求を検出し、さまざまなコンテンツを提供するために、私はcURLの要求を検出し、ifループ内のプロセスdie()を聞かせて私のアプリでは

<?php 

// Catch cURL/Wget requests 
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/^(curl|wget)/i', $_SERVER['HTTP_USER_AGENT'])) { 
    echo 'Hi curl user!'; 
} 
else { 
    echo 'Hello browser user!'; 
} 

?> 

を使用することができます。したがって、ブラウザだけであれば、条件は一致せず、次のすべてのPHPコードを実行します。

前述のように、cURLとWgetの両方は、ユーザーが任意のユーザーエージェントを設定できるようにします。しかし、要求されたサービスについては、この解決策で十分です。

関連する問題