在网上看了一编文章模拟人人网登录,恰好现在需要用到,但是出现了 “The URL has moved here” 是什么原因啊。谢谢,代码如下:$login_url = 'http://passport.renren.com/PLogin.do'; $post_fields['email'] = '[email protected]';
$post_fields['password'] = 'xxx';
$post_fields['origURL'] = 'http://www.renren.com/indexcon';
$post_fields['domain'] = 'renren.com';
//cookie文件存放在网站根目录的temp文件夹下
$cookie_file = tempnam('./temp','cookie'); $ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_exec($ch);
curl_close($ch); //带上cookie文件,访问人人网首页
$send_url='http://home.renren.com/Home.do';
$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$contents = curl_exec($ch);
curl_close($ch); //清理cookie文件
unlink($cookie_file); //输出人人网首页的内容
print_r($contents);
$post_fields['password'] = 'xxx';
$post_fields['origURL'] = 'http://www.renren.com/indexcon';
$post_fields['domain'] = 'renren.com';
//cookie文件存放在网站根目录的temp文件夹下
$cookie_file = tempnam('./temp','cookie'); $ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_exec($ch);
curl_close($ch); //带上cookie文件,访问人人网首页
$send_url='http://home.renren.com/Home.do';
$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$contents = curl_exec($ch);
curl_close($ch); //清理cookie文件
unlink($cookie_file); //输出人人网首页的内容
print_r($contents);
--location-trusted Follow Location: and send auth to other hosts (H)有点冲动,感觉这就是问题的关键 :curl --output "./rr.html" --dump-header "d_cookie01" --cookie-jar "c_cookie01" --create-dirs --location --data "email=test&password=test&autoLogin=ture&origURL=&domain=renren.com&formName=&method=&isplogin=true&submit=登录" http://www.renren.com/PLogin.dowowowo登录后的主页下载下来了!! 仔细查看d_cookie01(包含从c_cookie01的内容,但--cookie-jar 产生的更简洁)有这么一条Location:http://www.renren.com/callback.do?t=9d5201d04d44156fb070037e9493f5fd3&origURL=http%3A%2F%2Fwww.renren.com%2FHome.do&needNotify=false原来每次提交登录表单后还需要跳转的,而-L 则是跟随跳转链接的。我们也可以分成两步去做:1.先提交表单,保存返回来的cookie
curl --output "./rr.html" --dump-header "d_cookie01" --data "email=test&password=test&autoLogin=ture&origURL=& domain=renren.com&formName=&method=&isplogin=true& submit=登录" http://www.renren.com/PLogin.do
2.在d_cookie01中找到location,然后把cookie和location一起提交
curl --output "./rr.html" --dump-header "d_cookie01" --location http://www.renren.com/callback.do?t=9d5201d04d44156fb070037e9493f5fd3&origURL=http%3A%2F%2Fwww.renren.com%2FHome.do&needNotify=falseOK,就拿到了登录后的主页。
解决方法在后面已经描述,在cookie中取得地址然后再GET一次.没有人人帐号,也没去过人人网.我这还一堆代码要敲,测试的事情 实在抱歉。
The URL has moved here 可以进入首页,但是还是自动进不了
版主帮我看看,只要复制一下代码就可以了。
$cookie_file = tempnam('./temp','cookie');
$login_url = 'http://passport.renren.com/PLogin.do';
$post_fields = 'key_id=1&domain=renren.com&origURL=http://www.renren.com/home&email=xxx&password=xxx';
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_exec($ch);
curl_close($ch); $url = 'http://guide.renren.com/guide';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$contents = curl_exec($ch);
curl_close($ch);
人人网不是有API可以调用嘛,直接使用官方的接口不就好了。http://wiki.dev.renren.com/wiki/PHP另外有人提供了SDK
http://dev.renren.com/blog/239