2013-09-23 148 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。我得到了一个令牌,并且我得到了一个刷新令牌。但我怎么能通过令牌和出价特定的产品。我无法理解... –