2011-01-18 11 views
1

次のコードを使用して、username/passwordログインで保護されたページにアクセスしています。Zend_Http_Clientがクッキーを保存していません

//Fetch homepage 
    $client = new Zend_Http_Client(); 
    $client->setCookieJar(); 
    $client->setUri('https://www.yourloungelearning.co.uk/crew_trainer/login.php'); 
    //$client->setParameterPost('username', $_SESSION['username']); 
    //$client->setParameterPost('password', $_SESSION['password']); 
    $client->setParameterPost('username', '#####'); 
    $client->setParameterPost('password', '#####'); 
    $response = $client->request('POST'); 

    // Now we're logged in, get private area! 
    $client->setUri('https://www.yourloungelearning.co.uk/crew_trainer/index.php'); 
    $response = $client->request('GET'); 

    echo $response->getBody(); 

最後のエコーは、ログイン画面を再度返します(ログインに失敗したことを示します)。これはZendのドキュメントからほぼ正確にコピーされます。誰かが私が間違っているのを見ることができますか?

+0

フォームの各フィールドのデータを必ず送信してください。送信ボタンがありません。また、ログイン要求(POST)からの応答を確認することもできます。 – Phil

答えて

2

このページのいくつかのテストでは、処理されるログイン用のPOSTデータの一部として、送信ボタンの値を含める必要があります(実際の値は無関係で、存在していなければなりません) 。

$client->setParameterPost('submit', 'Login'); 

ログイン試行の応答を確認した場合、これが気づいたでしょう。

+0

興味のないところでは、あなたはどんな反応をお持ちですか?私が持っていた唯一の応答は、(私が期待していたようにユーザーのホーム画面の代わりに)ログインページが再び送信されたことでした。私が見ることができるエラーはありませんでした= S – gsteinert

+0

@gsteinert POST要求からの応答。フォームをもう一度見たら、それはうまくいかなかったことを意味します。 – Phil

0

解決策ではありませんが、ただ->setCookieJar()を使用する代わりに、手動でZend_Http_CookieJarをインスタンス化して渡す必要があります。これにより、実際にログインCookieを受け取った方が簡単にデバッグできます。

+0

時計を追加するのに便利ですが、いつでも 'setCookieJar'で作成されたクッキージャーを入手できます – Phil

1

私はこの問題を昨日持っていましたが、API siteを見てください。

->setCookieJar(true) 

パラメータtrueは新しいCookieJarを作成しますが、このパラメータを使用しないと、私にとって問題はありません。

関連する問題