Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php curl登录yahoo.co.jp?_Php_Cookies_Curl_Login_Yahoo - Fatal编程技术网

使用php curl登录yahoo.co.jp?

使用php curl登录yahoo.co.jp?,php,cookies,curl,login,yahoo,Php,Cookies,Curl,Login,Yahoo,我想使用php和curl登录yahoo.co.jp网站。我已经试过yahoo.com了。它工作得很好。但是当我使用相同的格式登录yahoo.co.jp时。但它不起作用。它正在进行capcha验证 我尝试了很多方法,但都不起作用。下面给出了我的代码 <?php set_time_limit(0); //$php_userid = 'username'; //$php_password ='password'; Example login $php_userid = 'jpnathans

我想使用php和curl登录yahoo.co.jp网站。我已经试过yahoo.com了。它工作得很好。但是当我使用相同的格式登录yahoo.co.jp时。但它不起作用。它正在进行capcha验证

我尝试了很多方法,但都不起作用。下面给出了我的代码

<?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;
?>


请引导我。我的代码出了什么问题。告诉我任何人。

你有一个挥之不去的
http://us.ard.yahoo.com
在第一个
$loginurl
中,它可能是一个
*.co.jp
,您需要检查文档以了解要使用的正确URL

另一个问题可能是在
.co.jp
.com
之间切换时忘记更改URL签名

编辑

当我仔细查看代码时,我注意到您立即打开然后关闭cookie jar,这将不起作用,您还可以使用write binary
wb
标志打开它,这是不需要的。这就是为什么你有一块空饼干

你需要做的是

$cookie_file_path = "cookie.txt"; // Please set your Cookie File path
$fp = fopen($cookie_file_path,'w'); 
然后在脚本的最后,您可以关闭cookie文件

fclose($fp);

最后,根据我的研究,不可能在oauth中绕过yahoo登录,因为登录程序一直在更新。这是oauth,你真正需要的是

  • 实现一个供用户登录的链接

  • 登录后,将访问令牌和刷新令牌存储到数据库中

  • 访问令牌每1小时过期一次,因此,在调用yahoo api之前,您需要确保访问令牌不会过期,否则,请使用刷新令牌更新您的访问令牌

  • 到目前为止,我测试了4-5天,它运行没有任何问题,但我怀疑刷新令牌将过期,因此在我的程序中,我警告用户如果刷新令牌过期,请再次登录


  • 就这些。希望您能解决您的问题

    很抱歉,我无法阅读错误消息,您能将其翻译成英文以便我们提供帮助吗?您没有发布所有这些变量$php_userid='jpnathanstock'$php_password='somepwpw!2345';@如果它们实际上在
    $POSTFIELDS
    变量中,那么这个错误可能意味着主机名或签名不匹配,您能告诉我
    $cookie
    的内容和最后的
    $LOGINURL
    吗?另外,您回复的最终
    $result
    的内容是什么?这可能是一个关于发生了什么的提示,您能否返回到.com版本并检查cookie包含的内容?我需要的是我想自动登录日本雅虎网站,然后将出价放入雅虎拍卖。所有进程都将自动运行。我已经试过oAuth了。我有一个令牌,还有一个刷新令牌。但是我怎样才能传递令牌并对特定的产品进行出价呢。我无法理解。。。