2017-09-13 5 views
0

사용자에게 몇 가지 정보를 보여주는 간단한 PHP 스크립트가 있습니다. 동일한 페이지가 cURL로 요청되거나 Wget과 함께 저장된 경우이 정보를 가능한 한 불만있게하려고합니다.페이지가 cURL 또는 Wget으로 액세스되는 경우 PHP에서 탐지

Stackoverflow에 대한 몇 가지 유사한 질문이 있지만 "I want to block cURL"또는 "리디렉션 양식 요청 ..."과 같은 일부 추가 기능이 있습니다. 일반적으로 cURL을 사용하면 사용자가 모든 요청 매개 변수를 변경하고 브라우저 인 것처럼 가장하기 때문에 응답을 통해 cURL 요청을 안정적으로 감지 할 수 없다는 답이 있습니다. That 's ok for me, 나는 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). https://requestb.in에서이 easiliy를 테스트 할 수 있습니다.

여러 응용 프로그램이 요청 헤더의 사용자 에이전트 문자열에 액세스 할 수 있습니다. PHP에서는 $_SERVER['HTTP_USER_AGENT'] 변수를 사용할 수 있습니다.

그래서 당신은 내가 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!'; 
} 

?> 

을 사용할 수 있습니다, 컬 또는를 Wget 요청을 감지하고 다양한 콘텐츠를 제공합니다. 따라서 브라우저 만 있으면 조건이 일치하지 않고 다음 PHP 코드가 모두 실행됩니다.

앞에서 설명한 것처럼 cURL과 Wget은 사용자가 임의의 사용자 에이전트를 설정할 수 있도록합니다. 그러나 요청 된 서비스의 경우이 솔루션으로 충분합니다.