6

PHPQueryのWebBrowserプラグインを使用してWebサイトにログインしようとしています。正常にログインできますが、前の呼び出しから次の呼び出しまで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を使用して他のリクエストを行うにはどうすればよいですか?

4

1 に答える 1

3

この問題を解決するために、ソースコードを調べました。私の第一印象は、コードが非常に貧弱に書かれているということでした。コメントアウトされたデバッグコード、いたるところにあるタイプミス、1マイルの長さの関数など。作成者がこのコードで何かを変更すると、独自のソリューションになってしまう可能性があるため、長期的には別のソリューションへの切り替えを検討することをお勧めします。アップグレードで壊れたコード。

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

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

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

または、691行目にパッチphpQuery.phpを適用して、シングルトンなどとして定義できるグローバルCookiejarを含めることもできます。(それが言うところ$client->setCookieJar();です)。

繰り返しになりますが、このコードは非常に不十分に記述されているため、機能が少し不足している場合でも、生のcurl呼び出しを使用する方がはるかに優れています。

于 2013-05-28T08:03:00.397 に答える