-1

タスクを自動化しようとしていますが、フォームからのログインが必要な Web サイトからデータを取得したいと考えています。

すべてが機能しますが、奇妙なことに、最初にのみ機能し、その後は資格情報を送信でき、Cookie に資格情報が保存されているため、ログインが成功したと表示されます。ユーザー セッションを更新するたびに Cookie をクリアしようとしましたが、Cookie をクリアすると、最初のログイン試行が失敗する前に動作したため、ログインできなくなります。

<?php

$cookie = "cookie.txt";

if (is_writable($cookie)) {
   // echo 'The cookie is writable';
} else {
   // echo 'The cookie is not writable';
   error_log("The cookie is not writable!", 3, "errors.log");
   ## start by making it writable :
   if (! chmod ( $cookie, 0777 ))
      die ( 'chmod() failed on file cookie.txt' );
}

function curl($url, $binary=false, $post=false, $cookie=false ){

$ch = curl_init();

$headers[] = "Accept: */*";
$headers[] = "Connection: Keep-Alive";
$headers[] = "Content-type: application/x-www-form-urlencoded;charset=UTF-8";

    curl_setopt($ch, CURLOPT_HTTPHEADER,  $headers);
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_HEADER, false);
    curl_setopt ($ch, CURLOPT_REFERER, $url);
    curl_setopt ($ch, CURLOPT_ENCODING, 'gzip,deflate');
    curl_setopt ($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);



    if($cookie){

        $agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
        curl_setopt($ch, CURLOPT_USERAGENT, $agent);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);

    }


    if($binary)
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

    if($post){
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }

 $result = curl_exec($ch);
 curl_close($ch);

 return $result;
}

$getUser = $_GET["u"];
$getPass = $_GET["p"];

if (empty($getUser) || empty($getPass))
{
    $config = include 'config.php';
    $username = $config['username'];
    $password = $config['password'];
}

else 
{
    //echo "Using passed User & P/W!";
    $username = $getUser;
    $password = $getPass;
}

    $url=""; 

$postdata = "Account.UserName=".$username."&Account.PassWord=".$password."&action=/account/signin";

// function
$ch = curl($url, false, $postdata, $cookie);

// The below will request a URL inside your account to check for login success
$loginCheckURL = ""
$loginCheck = curl($loginCheckURL, false, false, $cookie);

preg_match('/<title>(.*)<\/title>/i', substr($loginCheck, 300, 400), $titles);

if (strpos($titles[1],'Account Sign In') !== false) {
echo "Login Failed! <br><br>";
}
else echo "Login Successful! <br><br>";

?>
4

1 に答える 1