2013-01-23 10 views
6

私はPHPQueryのWebBrowserプラグインを使用してWebサイトにログインしようとしています。私は正常にログインすることができますが、私は次のコールへの前回の呼び出しからクッキーを再利用する方法がわかりません。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 
} 

セッション/ログインCookieを使用して他のリクエストを行うにはどうすればよいですか?

+0

残念ながら私はこのプラグインでは可能ではないと思っていますが、あなたの目標を説明できれば、あなたのために働くことができる別の方向にあなたを送ることができるかもしれません。例えば、 'CURL'を使って外部サイトにログインし、ログオンしておくこともできます。 '単純なHTML DOM'のようなものを使用して、結果を解析し、フォローアップ要求を行うことができます –

答えて

3

この問題を解決するためのソースコードを見てきました。私の最初の印象は、コードが非常に良く書かれていなかったことです。デバッギングコードはコメントアウトされています。ミスヒットした機能など、長時間にわたり別のソリューションに切り替えることを検討したいかもしれません。作者がこのコードで何かを変更すると、アップグレードでコードが壊れました。

つまり、WebBrowserプラグインは、ブラウザオブジェクト自体にアクセスできます。ブラウザオブジェクトには、getLastResponse()という関数が含まれています。これにより、Zend_Http_Responseオブジェクトが返されます。を使用すると、理論的にはというCookieを取得できます。

問題は、これらのCookieを設定する方法がないことです。あなたの周りここに、あなたのクッキーを設定して、独自のHTTPリクエストオブジェクト(phpQuery::ajax()のパラメータ2)を含むようにライン102の周りのどこかのプラグインのWebブラウザにパッチを適用する必要があります:

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

また、あなたも691にphpQuery.phpラインにパッチを当てることができシングルトンなどと定義できるグローバルなクッキージャーが含まれています。 (右は$client->setCookieJar();と書いてあります)。

また、このコードはあまり書かれていませんが、少し機能が不足していても、おそらくraw curl callsを使用する方がずっと良いでしょう。

関連する問題