首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

PHP 模拟登录出现有关问题

2012-05-27 
PHP 模拟登录出现问题在网上看了一编文章模拟人人网登录,恰好现在需要用到,但是出现了 “The URL has moved

PHP 模拟登录出现问题
在网上看了一编文章模拟人人网登录,恰好现在需要用到,但是出现了 “The URL has moved here” 是什么原因啊。谢谢,代码如下:

PHP code
$login_url = 'http://passport.renren.com/PLogin.do';    $post_fields['email'] = 'xxx@gmail.com';    $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);


[解决办法]
以下内容转贴.

这两天模拟浏览器提交登录表单,提交完成后, The URL has movedhere 。。

每次都需要点击连接后才打开登录后的主页。这并不是我想要的。

又看了一遍说明,看到参数-L

如下:-L/--location Follow Location: hints (H)
--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.do

wowowo登录后的主页下载下来了!!

 

仔细查看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=false

OK,就拿到了登录后的主页。

热点排行