6

パスワードで保護されたページにログインして保護されたページを取得する次の php コードがあります。

ログイン機能を再度使用する代わりに、Cookie ファイルを使用して次の保護されたページを開きたい ! つまり、他の保護されたページを取得するためのログイン手順をバイパスしたいだけです。

これを行う方法を教えてもらえますか?

注: 私のログイン関数は、スクリプトと同じフォルダーに表示されない Cookie を作成しません!誰か教えてください。

<?

        $ch=login();
    $html=downloadUrl('http://www.example.com/page1.asp', $ch);

    ////echo $html;


    function downloadUrl($Url, $ch){
        curl_setopt($ch, CURLOPT_URL, $Url);
        curl_setopt($ch, CURLOPT_POST, 0);
        curl_setopt($ch, CURLOPT_REFERER, "http://www.google.com/");
        curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        $output = curl_exec($ch);
        return $output;
    }



   function login()
   {
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.asp'); //login URL
      curl_setopt ($ch, CURLOPT_POST, 1);
      $post_array = array(  
       'txtUserName'=>'brad',  
       'txtPassword'=>'bradpassword',  
        );
        curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_array);
        curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        $store = curl_exec ($ch);
        return $ch;
  } 
?>
<html>


<br>
<textarea rows="30" cols="150"><?PHP  print_r($html); ?></textarea>
</html>
4

2 に答える 2

2

最初にログインしてから、後続のリクエストで Cookie ファイルのパスを参照する必要があります。

function curlPost($url,$postData){
    $ch= curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $postData,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_CONNECTTIMEOUT=>30,
        CURLOPT_SSL_VERIFYPEER=>false,
        CURLOPT_USERAGENT=>"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
        CURLOPT_COOKIESESSION => true,
        CURLOPT_COOKIEFILE => 'cookie.txt',
        CURLOPT_COOKIEJAR => 'cookie.txt'
    ));
    $output = curl_exec($ch);
    curl_close( $ch );
    return $output; 
}

$postData = array(
    'email' => 'aryan022@gmail.com',
    'password' => 'aryan022',
    'redirect_to' => 'http://localhost/cakephp/account '
 );

 $output=curlPost("http://localhost/cakephp/login",$postData);

  /*use for subsequest request without passing all postData once login
  $postData = array();
  $output=curlPost("http://localhost/cakephp/account",$postData);
 */
 echo $output;
于 2015-01-04T16:07:50.733 に答える
2

使用する

curl_setopt($ch,CURLOPT_COOKIEJAR, $cookieFileLocation);
curl_setopt($ch,CURLOPT_COOKIEFILE, $cookieFileLocation);

$cookieFileLocation が Cookie ファイルの場所である 2 番目のリクエスト。

2つのリクエストが必要です。1 つ目は、Cookie ファイルを埋めるログイン要求です。

Cookie ファイルが存在するかどうかを確認する必要がis_file($cookieFileLocation)あります。存在する場合は、ログイン プロセスをバイパスして、保護されたダウンロード コンテンツの 2 番目の要求を実行できます。

ほとんどのシステムにはセッションの有効期限があるため、一定期間後にログインする必要があることに注意してください。返されたページの html でログイン エラーを確認し、再度ログインする必要があることを示します。

于 2013-06-01T17:24:03.647 に答える