2011-05-12 10 views
6

का उपयोग कर XHR अनुकरण करें आज मैं ऑनलाइन आंकड़ों की जांच के लिए कुछ फ़ोरम लॉगिन के लिए क्रॉन नौकरी बनाने की कोशिश कर रहा हूं। Login.php स्क्रिप्ट फ़ॉर्म सबमिट किए गए मानों के साथ एक AJAX अनुरोध स्वीकार करता है: उपयोगकर्ता, पासवर्ड, सर्वर, और एक हैश आईडी (एक छिपे हुए क्षेत्र में)। मैं पहले ही लॉगिन स्क्रिप्ट में मान सबमिट कर सकता हूं और कुकी जार का उपयोग करके सत्र को भी संरक्षित कर सकता हूं लेकिन जब मैं आवश्यक पैरामीटर (sendlogin.php से आ रहा हूं) पास करने का प्रयास करता हूं, तो ऐसा लगता है कि उचित अनुरोध शीर्षलेखों के साथ नहीं आते हैं । इसलिए मुझे यह जानने की ज़रूरत है कि मैं curl का उपयोग करके इसे कैसे अनुकरण कर सकता हूं:PHP: curl

GET login.php?user=foo&password=bar&server=1&id=7131c359e534e3790eaefa495d621b2a HTTP/1.1 

Host: someloginserver.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 
Accept: application/json, text/javascript, */*; q=0.01 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip, deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
X-Requested-With: XMLHttpRequest 
Referer: http://someloginserver.com/sendlogin.php 
Cookie: __cfduid=de2fe207593d1135fc2426fb06e3270741303115848; hellobar_current=1300711502; hellobar_1300711502_variation=11462; PHPSESSID=cc621c6f57c43130d51d3147e319d8c2 

आशा है कि आप इस पर मेरी सहायता कर सकते हैं।

+0

'curl_setopt ($ curlHandle, 'CURLOPT_HTTPHEADER', $ headersArray) करने के लिए प्रासंगिक हेडर दर्रा;'। वर्बोज़ कर्ल लॉगिंग चालू करें। जब तक हेडर कर्ल आउटपुट आपकी अपेक्षा से मेल नहीं खाता तब तक संशोधित करें। –

उत्तर

9

पीएचपी एपीआई में कर्ल करने के लिए आप का उपयोग कर सकते हैं:

curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    "Host" => "someloginserver.com", 
    "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", 
    "Accept" => "application/json, text/javascript, */*; q=0.01", 
    "Accept-Language" => "en-us,en;q=0.5", 
    "Accept-Encoding" => "gzip, deflate", 
    "Accept-Charset" => "ISO-8859-1,utf-8;q=0.7,*;q=0.7", 
    "Keep-Alive" => "115", 
    "Connection" => "keep-alive", 
    "X-Requested-With" => "XMLHttpRequest", 
    "Referer" => "http://someloginserver.com/sendlogin.php" 
)); 

लेकिन अपने वास्तविक समस्या कुकी :, जो मैंने ऊपर बहिष्कृत कर दिया है हो सकता है। एक कुकीर के साथ अपना कर्ल अनुरोध सेटअप करें। वर्तमान सत्र मान प्राप्त करने के लिए एक गलत अनुरोध करें, और केवल बाद में अपना वास्तविक XHR अनुरोध भेजें।

+0

ठीक है लगता है कि आप मेरे बारे में सही हैं जो कुकी पर समस्याएं पैदा करेंगे। मुझे पता चला कि sendlogin.php में, एक जावास्क्रिप्ट फ़ाइल है जो 2 नए कुकी चर जोड़ती है: hellobar_current और hellobar_1300711502_variation तो सवाल अब है, मैं कुकी जार पर जावा जावास्क्रिप्ट जोड़ा कुकी मूल्य कैसे शामिल करूं? – VeeBee

+0

आप या तो फ़ायरफ़ॉक्स की एक अनुमानित कुकी फ़ाइल का पुन: उपयोग कर सकते हैं, या अन्य दो मैन्युअल रूप से इंजेक्ट करने के लिए 'CURLOPT_COOKIE' का उपयोग कर सकते हैं। मुझे संदेह है कि उन दो कुकीज़ प्रासंगिक autorizationwise हालांकि हैं। – mario

+0

ठीक है अब मैं अतिरिक्त कुकीज़ इंजेक्ट करने में सक्षम हूं लेकिन वे कुकीजर में सहेजने लगते नहीं हैं। यहां मेरा कोड स्निपेट है: http://pastebin.com/FZb9mfKZ – VeeBee

10

वह सरणी प्रारूप काम नहीं करता है। कर्ल सहयोगी सरणी स्वीकार नहीं करता है। प्रत्येक तत्व निम्न स्वरूप में कोई स्ट्रिंग होना चाहिए:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     "Host: www.somehost.com", 
     "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", 
     "Accept: application/json, text/javascript, */*; q=0.01", 
     "Accept-Language: en-us,en;q=0.5", 
     "Accept-Encoding: gzip, deflate", 
     "Connection: keep-alive", 
     "X-Requested-With: XMLHttpRequest", 
     "Referer: http://www.somehost.com/" 
    )); 
+0

यह सही है। – andreszs