2013-09-23 144 views
1

我想用php和curl登錄yahoo.co.jp網站。我已經嘗試過yahoo.com。它的工作非常好。但是當我使用相同的格式登錄yahoo.co.jp。但它不工作。它正在進行capcha驗證。yahoo.co.jp使用php curl登錄?

enter image description here

我嘗試很多方法,但它不工作我的代碼如下。

<?php 
set_time_limit(0); 

//$php_userid = 'username'; 
//$php_password ='password'; 

Example login 
$php_userid = 'jpnathanstock'; 
$php_password ='somepwpw!2345'; 



$cookie_file_path = "cookie.txt"; // Please set your Cookie File path 

$fp = fopen($cookie_file_path,'wb'); 
fclose($fp); 
$agent = "Mozilla/5.0 (Linux; U; Android 2.3.2; ja-jp; SonyEricssonSO-01C Build/3.0.D.2.79) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"; 
$reffer = "http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&logout=1&.src=www&.done=http://www.yahoo.co.jp"; 

// log out. 
$LOGINURL = "http://us.ard.yahoo.com/SIG=12hoqklmn/M=289534.5473431.6553392.5333790/D=mail/S=150500014:HEADR/Y=YAHOO/EXP=1135053978/A=2378664/R=4/SIG=133erplvs/*http://login.yahoo.co.jp/config/login?logout=1&.done=http://auctions.yahoo.co.jp/&.src=ym&.lg=us&.intl=us"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$LOGINURL); 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
$result = curl_exec ($ch); 
curl_close ($ch); 


//1. Get first login page to parse hash_u,hash_challenge 

$LOGINURL = "https://login.yahoo.co.jp/config/login?"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$LOGINURL); 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
$loginpage_html = curl_exec ($ch); 
curl_close ($ch); 

preg_match_all("/name=\".u\" value=\"(.*?)\"/", $loginpage_html, $arr_hash_u); 
preg_match_all("/name=\".challenge\" value=\"(.*?)\"/", $loginpage_html, $arr_hash_challenge); 

$hash_u = $arr_hash_u[1][0]; 
$hash_challenge = $arr_hash_challenge[1][0]; 



//.tries=1&.src=auc&.last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc&promo=&.intl=jp&.bypass=&.partner=&.u=cq4ce2ov02mdi&.v=0&.fUpdate=Y&hasMsgr=0&.chkP=Y&.done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus&login=********&passwd=*********** 
// 2- Post Login Data to Page https://login.yahoo.com/config/login? 

$LOGINURL = "https://login.yahoo.co.jp/config/login"; 

$POSTFIELDS = '.tries=1&.src=auc&.hash=&.last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc&promo=&.intl=jp&.bypass=&.partner=&.u='.$hash_u.'&.v=0&.fUpdate=Y&.challenge='.$hash_challenge.'&.hasMsgr=0&.chkP=Y&.done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus&login='.$php_userid.'&passwd='.$php_password; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$LOGINURL); 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$POSTFIELDS); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_REFERER, $reffer); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
$result = curl_exec ($ch); 
curl_close ($ch); 
print_r($result); 
exit; 
?> 

請指導我。我的代碼有什麼問題。我建議任何人..

+0

對不起,我看不懂錯誤信息,你能把它翻譯成英文,我們可以幫忙嗎? –

+0

你沒有發佈所有這些變量** $ php_userid ='jpnathanstock'; $ php_password ='somepwpw!2345'; ** –

+0

@DarkWish他們實際上在那裏,在'$ POSTFIELDS'變量 –

回答

3

在第一$loginurl你有一個揮之不去的http://us.ard.yahoo.com,應該可能是一個*.co.jp,你需要檢查的文檔知道正確的URL中使用。

另一個問題可能是你忘了,當你切換.co.jp.com之間

編輯

當我看着多一點到你的代碼更改URL簽名,我注意到你立即打開,然後關閉餅乾罐,這將無法正常工作,您也可以用寫入二進制wb標誌打開它,這不是必需的。這就是爲什麼你有一個空的cookie。

你需要做的是

$cookie_file_path = "cookie.txt"; // Please set your Cookie File path 
$fp = fopen($cookie_file_path,'w'); 

然後在腳本的結尾處,您可以關閉cookie文件

fclose($fp); 
+0

我可以更新我的截圖請看 –

+0

請幫我解釋一下錯誤 –

+0

這個錯誤可能意味着某些東西在主機上不匹配姓名或簽名,你能告訴我'$ cookie'的內容和最終的$ LOGINURL嗎?你還在迴應最後的'$ result'的內容是什麼? –

0

最後,從我的研究就不可能繞過雅虎登錄oauth,因爲登錄程序不斷更新。它是OAuth的,你真正需要的是

  1. 實現一個鏈接,用戶登錄

  2. 登錄後,將訪問令牌和刷新令牌到你的數據庫

  3. 訪問令牌每1小時過期一次,因此,在調用雅虎API之前,您需要確保訪問令牌不會過期,否則使用刷新令牌更新您的訪問令牌

  4. 到目前爲止,我測試了4-5天,一世沒有任何問題牛逼跑,但我懷疑刷新令牌將到期,所以在我的節目,我警告用戶,如果刷新令牌到期

這一切再次登錄。希望你能解決你的問題

+0

我的需求是我想自動登錄日本雅虎網站,然後我將出價放入雅虎拍賣。這個全部過程都是自動運行的。我已經嘗試過oAuth。我得到了一個令牌,並且我得到了一個刷新令牌。但我怎麼能通過令牌和出價特定的產品。我無法理解... –