2013-01-23 41 views
6

我想使用PHPQuery的WebBrowser插件登錄到網站。我能夠成功登錄,但我不確定如何重複使用先前來電的cookie。PHPQuery WebBrowser插件 - 使用Cookie

$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 
} 

如何使用會話/登錄Cookie發出其他請求?

+0

不幸的是,我不認爲它可能與這個插件,但如果你能解釋你的目標,我們可能能夠發送給你另一個方向,可以爲你工作。例如,您也可以使用'CURL'登錄到外部網站並保持登錄狀態。像「簡單的HTML DOM」可以用來解析結果並執行後續請求 –

回答

3

我看了一下源代碼來幫助你解決這個問題。我的第一印象是代碼寫得很差。調試代碼被註釋掉了,整個地方出現了拼寫錯誤,英里長的函數等等。從長遠來看,您真的可能想要考慮切換到不同的解決方案,因爲如果作者更改了代碼中的某些內容,您最終可能會擁有自己的代碼隨升級而中斷。

這就是說,WebBrowser插件可讓您訪問瀏覽器對象本身,其中包含一個名爲getLastResponse()的函數。這將返回一個Zend_Http_Response對象,您可以使用理論來獲取cookie。

問題是你沒有任何設置這些cookie的方法。你將不得不修補Web瀏覽器周圍線102某處插件,包括你自己的HTTP請求對象(phpQuery::ajax()參數2)與您的Cookie設置,在這裏:

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

另外,您還可以修補phpQuery.php線691包括一個可以定義爲單例的全局cookie jar。 (正確的地方是$client->setCookieJar();)。

再說一遍,這段代碼寫得很差,即使它缺少一點功能,使用raw curl calls也許會更好。