2016-07-14 22 views
0

https://www.amzreviewtrader.com/にログインしようとしています(https://www.amzreviewtrader.com/account.phpのおかげ)。 私は、トークンがいつもリフレッシュごとに変わることに気付きました。だから最初のカールで私はそれを得る。 その後、私はpostメソッドでトークン、電子メール、パスワードを渡そうとします。しかし、私はログインできない、なぜ私は知らない。トークン付きphp curlでログイン

function grab_page($site){ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
     curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 40); 
     curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); 
     curl_setopt($ch, CURLOPT_URL, $site); 
     ob_start(); 
     return curl_exec ($ch); 
     ob_end_clean(); 
     curl_close ($ch); 
    } 

    function login($url){ 

    $get_token = curl_init($url); 
     curl_setopt($get_token, CURLOPT_COOKIEJAR, "cookie.txt"); 
     curl_setopt($get_token, CURLOPT_COOKIEFILE, "cookie.txt"); 
     curl_setopt($get_token, CURLOPT_TIMEOUT, 40000); 
     curl_setopt($get_token, CURLOPT_RETURNTRANSFER, TRUE); 
     curl_setopt($get_token, CURLOPT_URL, $url); 
     curl_setopt($get_token, CURLOPT_FOLLOWLOCATION, TRUE); 
     $response = curl_exec($get_token); 
     $html = str_get_html($response); 
     $token = $html->find('div.col-xs-12 form.form-horizontal input')[0]->value; 
     echo $token; 

     $login = curl_init($url); 
     curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt"); 
     curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt"); 
     curl_setopt($login, CURLOPT_TIMEOUT, 40000); 
     curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE); 
     curl_setopt($login, CURLOPT_URL, $url); 
     curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE); 
     curl_setopt($login, CURLOPT_POST, TRUE); 
     curl_setopt($login, CURLOPT_POSTFIELDS, "account_token=".$token."&[email protected]&password=xxxxxxx"); 
     return curl_exec(); 
     curl_close(); 

     grab_page("https://www.amzreviewtrader.com/product-list.php"); 
    } 
+0

それはあなたがURLをロードするたびに変更されますされ、おそらく抗CSRFトークンです。 –

+0

フレンド、トークンはphpidsessionに基づいています。 – Joseph

答えて

1

あなたはトークンを取得するには、このような何かを行うことができます。

function getStr($string,$start,$end){ 
$str = explode($start,$string); 
$str = explode($end,$str[1]); 
return $str[0]; 
    } 

    $token = getStr($url, 'var token = "','"'); 
+0

私はちょうどトークンを取得します。問題はログインすることです。 – Joseph

+1

トークンを以下のようにエンコードしてみてください: '" .rawurlencode($ token)。 "'。 – Vinny

+0

私の友人はいません。私はエコー後にエコーを入れようとしました curl_setopt($ login、CURLOPT_POSTFIELDS、 "account_token ="。$ token。 "&[email protected]xxxx.xx&password=xxxxxxx"); return curl_exec(); 文字列は印刷されません。 – Joseph

関連する問題