curl模擬登陸時,在每一步 CURLOPT_COOKIEJAR, CURLOPT_COOKIEFILE都要儘量加上
阿新 • • 發佈:2019-02-13
我遇到過這樣一個問題:
postdata中除了賬號密碼,還有個叫csrf的引數,而這個引數先要通過爬取login頁面,才能獲得。
第一步:
第二步:do{ if($i > 2) break; $i++; $url = LOGIN_URL; echo "$url \n"; $ch = curl_init($url); $curl_opts = array(CURLOPT_HEADER => false, CURLOPT_NOBODY => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_USERAGENT => $user_agent, ); curl_setopt_array($ch, $curl_opts); $pass = curl_exec($ch); //curl_close($ch); }while(!$pass); preg_match_all('/name="csrf" value="(.*?)"><label/',$pass,$m); $csrf = $m[1][0];
$flag = true; $i = 0; #login ebay do{ if($i > 2) break; $i++; $url = LOGIN_URL; echo "$url \n"; $ch = curl_init($url); $curl_opts = array(CURLOPT_HEADER => false, CURLOPT_NOBODY => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_USERAGENT => $user_agent, CURLOPT_COOKIEJAR => $file_cook, CURLOPT_COOKIEFILE => $file_cook, CURLOPT_POST=> true, CURLOPT_POSTFIELDS => 'email='.$username.'&password='.$userpass.'&csrf='.$csrf, ); curl_setopt_array($ch, $curl_opts); $pass = curl_exec($ch); curl_close($ch); if($pass && strpos($pass, 'Chen')!==false){ $flag = false; } }while($flag);
該做的都照做了,但是,仍然登不上。後來發現,第一步沒有加入
CURLOPT_COOKIEJAR => $file_cook,
CURLOPT_COOKIEFILE => $file_cook,
這兩個引數,加上了,就可以正確登陸了。
結論:目標有可能第一步就給我們的瀏覽器種cookie,我們要在模擬登陸過程中,全部加上cookie操作。