2013-01-23 14 views
6

मैं PHPQuery की WebBrowser प्लगइन का उपयोग कर वेबसाइट में लॉगिन करने का प्रयास कर रहा हूं। मैं सफलतापूर्वक लॉगिन करने में सक्षम हूं लेकिन मुझे यकीन नहीं है कि पिछली कॉल से अगली कॉल तक कुकीज़ का पुन: उपयोग कैसे करें।PHPQuery WebBrowser प्लगइन - कुकीज़ का उपयोग

$client = phpQuery::browserGet('https://website.com/login', 'success1'); 

function success1($browser) { 
    $handle = $browser 
    ->WebBrowser('success2'); 
    $handle 
    ->find('input[name=name]') 
     ->val('username'); 
    $handle 
    ->find('input[name=pass]') 
     ->val('password') 
     ->parents('form') 
     ->submit(); 
} 

function success2($browser) { 
    print $browser; // prints page showing I'm logged in 

    // make authenticated requests here 
} 

मैं सत्र/लॉगिन कुकीज़ के साथ अन्य अनुरोध कैसे करूं?

+0

दुर्भाग्य से मैं इस प्लगइन के साथ यह संभव नहीं सोचता, लेकिन यदि आप अपने लक्ष्य को समझा सकते हैं तो हम आपको एक और दिशा में भेजने में सक्षम हो सकते हैं जो आपके लिए काम कर सकता है। उदाहरण के लिए आप किसी बाहरी साइट पर लॉगिन करने के लिए 'CURL' का भी उपयोग कर सकते हैं और लॉग ऑन रह सकते हैं। परिणामों को पार्स करने और फॉलोअप अनुरोध करने के लिए 'सरल HTML DOM' जैसी कुछ चीज़ों का उपयोग किया जा सकता है –

उत्तर

3

मैंने इस समस्या के साथ आपकी सहायता के लिए स्रोत कोड पर एक नज़र डाली है। मेरी पहली छाप यह थी कि कोड बहुत खराब लिखा गया था। डिबगिंग कोड सब जगह है, मील लंबी कार्यों पर टिप्पणी की, लिखने की त्रुटियों, आदि आप वास्तव में लंबे समय में किसी अन्य समाधान पर बदलने पर विचार करने के लिए है क्योंकि लेखक इस कोड में कुछ परिवर्तित करता है, आप अपने खुद के होने अंत हो सकता है चाहते हो सकता है एक अपग्रेड के साथ टूटा कोड।

कहा जा रहा है कि वेबब्रोसर प्लगइन आपको ब्राउज़र ऑब्जेक्ट तक पहुंच प्रदान करता है, जिसमें getLastResponse() नामक फ़ंक्शन होता है। यह Zend_Http_Response ऑब्जेक्ट देता है, जिसे आप सैद्धांतिक रूप से कुकीज प्राप्त करने के लिए उपयोग कर सकते हैं।

समस्या यह है कि आपके पास उन कुकीज़ को सेट करने का कोई तरीका नहीं है।

$xhr = phpQuery::ajax(array(
    'type' => 'GET', 
    'url' => $url, 
    'dataType' => 'html', 
)); 

वैकल्पिक रूप से आप भी phpQuery.php लाइन पैच सकता है 691 करने के लिए: आप अपनी खुद की HTTP अनुरोध वस्तु (phpQuery::ajax() के लिए पैरामीटर 2) शामिल करने के लिए अपने कुकीज़, सेट के साथ यहाँ के आसपास कहीं प्लगइन लाइन 102 के आसपास वेब ब्राउज़र पैच करने के लिए होता है एक वैश्विक कुकी जार शामिल करें जिसे आप सिंगलटन या उसके रूप में परिभाषित कर सकते हैं। (जहां यह कहता है $client->setCookieJar();)।

फिर से, यह कोड बहुत खराब लिखा गया है, तो शायद raw curl calls का उपयोग करके आप बहुत बेहतर हैं, भले ही इसमें कुछ कार्यक्षमता न हो।

संबंधित मुद्दे