2011-11-19 17 views
6

तो क्लाइंट कर्ल होने पर मैं कोडिनेटर का उपयोग कैसे कर सकता हूं, और उसके बाद कुछ अलग कर सकता हूं?कर्ल उपयोगकर्ता एजेंट

+0

आप कर्ल का उपयोग करते समय * स्पूफ * या कस्टम उपयोगकर्ता एजेंट शीर्षलेख सेट कर सकते हैं, इसलिए यह विश्वसनीय नहीं होगा। – MacMac

+1

मैं पूछ रहा हूं कि कर्ल से डिफ़ॉल्ट उपयोगकर्ता एजेंट क्या है, या उस मामले के लिए, php-cURL – macintosh264

उत्तर

19

आप नकली कर्ल का उपयोग करते समय उपयोगकर्ता-एजेंट कर सकते हैं, इसलिए जब आप जानते हैं कि यह कर्ल अनुरोध है तो यह उपयोगकर्ता-एजेंट के आधार पर व्यर्थ है।

उदाहरण के लिए: मैंने हाल ही में एक ऐप लिखा है जो Google से यूआरएल का पेजरैंक प्राप्त करता है। अब Google इसे पसंद नहीं करता है, इसलिए यह केवल एक निश्चित उपयोगकर्ता एजेंट को अपने पेजरैंक सर्वर तक पहुंचने की अनुमति देता है। उपाय? कर्ल और 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']

यह साबित होता है कर्ल के लिए कोई डिफ़ॉल्ट उपयोगकर्ता एजेंट है कि वहाँ: यह अनुरोध हेडर में इसे पास नहीं करेगा

+0

मुझे कोड मिल रहा था ":" अवैध_हेडर "," संदेश ":" अमान्य अनुरोध शीर्षलेख "," विवरण ":" हेडर 'उपयोगकर्ता-एजेंट' खराब है, गुम है, या एक अवैध मान है। " PHP और आपके समाधान का उपयोग कर कर्ल अनुरोध एक आकर्षण की तरह काम करता है। आपको केवल 'उपयोगकर्ता-एजेंट:'। $ _ सर्वर ['HTTP_USER_AGENT'] निर्दिष्ट करने की आवश्यकता है। धन्यवाद! –

1

आप स्पूफ कर सकते हैं या curl का उपयोग करते समय कस्टम उपयोगकर्ता एजेंट शीर्षलेख सेट कर सकते हैं, इसलिए यह विश्वसनीय नहीं होगा।

अन्यथा, आप यह कर सकते हैं:

if(strtolower($this->input->server('HTTP_USER_AGENT', true)) == 'curl') 
{ 
    // Is using cURL 
} 

यह तभी cURL अनुरोध उपयोगकर्ता एजेंट शीर्ष लेख में curl निहित घटित होता।

जहां तक ​​मुझे पता है, कर्ल अनुरोध करते समय कोई डिफ़ॉल्ट उपयोगकर्ता एजेंट सेट नहीं है।

+0

'जहां तक ​​मुझे पता है कि कोई डिफ़ॉल्ट नहीं है' ... - curl एक उपयोगकर्ता-एजेंट जैसे डिफ़ॉल्ट उपयोगकर्ता-एजेंट भेजता है: कर्ल/7.47.0' अगर आप मैन्युअल रूप से निर्दिष्ट नहीं करते हैं। – samiles

2

curl का अर्थ है - क्लाइंट यूआरएल लाइब्रेरी और इसका पूरा बिंदु उन अनुरोधों को करने में सक्षम होना है जो ग्राहक के समान होते हैं।

एकमात्र चीज जो आप कर सकते हैं वह जानकारी का पता लगाती है जो अनुरोध का हिस्सा है, जैसे आईपी पता, HTTP अनुरोध शीर्षलेख, कुकीज़/सत्र आईडी कुकी, यूआरएल (पथ/पृष्ठ), और कोई भी पोस्ट/डेटा प्राप्त करें । यदि अनुरोध करने के लिए कर्ल का उपयोग करने वाला व्यक्ति इसे अपेक्षित आईपी पते से कर रहा है और किसी भी अपेक्षित हेडर/कुकी/टोकन/यूआरएल/पोस्ट/मूल्य प्राप्त करने की आपूर्ति कर रहा है, तो आप ब्राउज़र बनाने से कर्ल अनुरोध को अलग नहीं कर पाएंगे अनुरोध।

3

यदि आप बॉट का पता लगाना चाहते हैं तो आप उपयोगकर्ता एजेंट पर भरोसा नहीं कर सकते हैं।सर्वोत्तम अभ्यास हैं:

  1. जांचें, कि आपका आगंतुक जेएस चलाता है (सभी मानव उपयोगकर्ता भी नहीं करते हैं)।
  2. जांचें, कि आपका आगंतुक वेबपृष्ठ (सीएसएस, छवियों, आदि) से जुड़ी अतिरिक्त फाइलें लोड करता है
  3. विज़िटर टाइमआउट जांचें। मनुष्य सामान्य रूप से प्रति सेकंड 10 पेज लोड नहीं करते हैं।
संबंधित मुद्दे