[分享]模拟新浪微博自动登陆

goosman 2012-10-09 01:27:06
加精
博客原文地址: http://blog.csdn.net/lgg201/article/details/8050606


<?php
/**
* 功能: 模拟新浪微博登陆
* 用途: 模拟用户登陆, 以便进行后续操作, 比如自动化的控制自己的新浪app刷新某些数据
* 注意事项:
* 1. 需要安装nodejs
* 2. 需要下载新浪的加密js文件, 请到新浪登陆页查看网络请求自己下载最新版本(我当时用的: http://js.t.sinajs.cn/t35/miniblog/static/js/sso.js?version=e482ef2bbdaa8bc2)
* 3. 对新浪加密js文件进行修改, 以便让nodejs可以运行它
* 1) 在文件前面增加下面内容
var window = {
location : {
hash : '',
host : 'weibo.com',
hostname : 'weibo.com',
href : 'http://weibo.com/',
pathname : '/',
port : '',
protocol : 'http:',
search : ''
},
navigator : {
appCodeName : 'Mozilla',
appName : 'Netscape',
appVersion : '5.0 (Macintosh)',
buildID : '20120713134347',
cookieEnabled : true,
doNotTrack : 'unspecified',
language : 'en-US'
}
};
var location = window.location;
var navigator = window.navigator;
* 2) 在文件后面增加下面内容
var argv = process.argv.splice(2);

var pubkey = argv[0],
servertime = argv[1],
nonce = argv[2],
password = argv[3];

var RSAKey = new sinaSSOEncoder.RSAKey();
RSAKey.setPublic(pubkey, '10001');
password = RSAKey.encrypt([servertime, nonce].join("\t") + "\n" + password);
console.log(password);
process.exit();
* 4. 修改encode_password函数中的nodejs程序路径和修改后的新浪js文件路径
* 5. 修改用户名密码
* author: selfimpr
* blog: http://blog.csdn.net/lgg201
* mail: lgg860911@yahoo.com.cn
*/

define('REQUEST_METHOD_GET', 'GET');
define('REQUEST_METHOD_POST', 'POST');
define('REQUEST_METHOD_HEAD', 'HEAD');

define('COOKIE_FILE', '/tmp/sina.login.cookie');

function curl_switch_method($curl, $method) {
switch ( $method) {
case REQUEST_METHOD_POST:
curl_setopt($curl, CURLOPT_POST, TRUE);
break;
case REQUEST_METHOD_HEAD:
curl_setopt($curl, CURLOPT_NOBODY, TRUE);
break;
case REQUEST_METHOD_GET:
default:
curl_setopt($curl, CURLOPT_HTTPGET, TRUE);
break;
}
}
function curl_set_headers($curl, $headers) {
if ( empty($headers) ) return ;
if ( is_string($headers) )
$headers = explode("\r\n", $headers);
#类型修复
foreach ( $headers as &$header )
if ( is_array($header) )
$header = sprintf('%s: %s', $header[0], $header[1]);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
}
function curl_set_datas($curl, $datas) {
if ( empty($datas) ) return ;
curl_setopt($curl, CURLOPT_POSTFIELDS, $datas);
}
function curl_request($url, $method = REQUEST_METHOD_GET, $datas = NULL, $headers = NULL) {
static $curl;
if ( !$curl )
$curl = curl_init();
curl_switch_method($curl, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl, CURLOPT_COOKIEJAR, COOKIE_FILE);
curl_setopt($curl, CURLOPT_COOKIESESSION, TRUE);
if ( $datas )
curl_set_datas($curl, $datas);
if ( $headers)
curl_set_headers($curl, $headers);
$response = curl_exec($curl);
if ( $errno = curl_errno($curl) ) {
error_log(sprintf("%10d\t%s\n", $errno, curl_error($curl)), 3, 'php://stderr');
return FALSE;
}
return $response;
}

function get_js_timestamp() {
return time() * 1000 + rand(0, 999);
}
function http_build_query_no_encode($datas) {
$r = array();
foreach ( $datas as $k => $v )
$r[] = $k . '=' . $v;
return implode('&', $r);
}

function makeUrl($url, $info, $encode = TRUE) {
if ( !is_array($info) || empty($info) ) return $url;
$components = parse_url($url);
if ( array_key_exists('query', $components) )
$query = parse_str($components['query']);
else
$query = array();
if ( is_string($info) ) $info = parse_str($info);
$query = array_merge($query, $info);
$query = $encode
? http_build_query($query)
: http_build_query_no_encode($query);
$components['scheme'] = array_key_exists('scheme', $components)
? $components['scheme'] . '://'
: '';
$components['user'] = array_key_exists('user', $components)
? $components['user'] . ':' . $components[HTTP_URL_PASS] . '@'
: '';
$components['host'] = array_key_exists('host', $components)
? $components['host']
: '';
$components['port'] = array_key_exists('port', $components)
? ':' . $components['port']
: '';
$components['path'] = array_key_exists('path', $components)
? '/' . ltrim($components['path'], '/')
: '';
$components['query'] = $query
? '?' . $query
: '';
$components['fragment'] = array_key_exists('fragment', $components)
? '#' . $components['fragment']
: '';
return sprintf('%s%s%s%s%s%s%s', $components['scheme'], $components['user'], $components['host'],
$components['port'], $components['path'],
$components['query'], $components['fragment']);
}

function encode_username($username) {
return base64_encode(urlencode($username));
}
function encode_password($pub_key, $password, $servertime, $nonce) {
#这里是要用nodejs执行新浪的js文件
$response = `/usr/local/node.js-0.8.8/bin/node sina.js "$pub_key" "$servertime" "$nonce" "$password"`;
return substr($response, 0, strlen($response) - 1);
}


function main_page() {
return curl_request('weibo.com');
}
function prepare_login_info() {
$time = get_js_timestamp();
$url = makeUrl('http://login.sina.com.cn/sso/prelogin.php', array(
'entry' => 'sso',
'callback' => 'sinaSSOController.preloginCallBack',
'su' => encode_username('undefined'),
'rsakt' => 'mod',
'client' => 'ssologin.js(v1.4.2)',
'_' => $time,
), FALSE);
$response = curl_request($url);
$length = strlen($response);
$left = 0;
$right = $length - 1;
while ( $left < $length )
if ( $response[$left] == '{' ) break;
else $left ++;
while ( $right > 0 )
if ( $response[$right] == '}' ) break;
else $right --;
$response = substr($response, $left, $right - $left + 1);
return array_merge(json_decode($response, TRUE), array(
'preloginTime' => max(get_js_timestamp() - $time, 100),
));
}

function login($info, $username, $password) {
$feedbackurl = makeUrl('http://weibo.com/ajaxlogin.php', array(
'framelogin' => 1,
'callback' => 'parent.sinaSSOController.feedBackUrlCallBack',
));
$datas = array(
'encoding' => 'UTF-8',
'entry' => 'weibo',
'from' => '',
'gateway' => 1,
'nonce' => $info['nonce'],
'prelt' => $info['preloginTime'],
'pwencode' => 'rsa2',
'returntype' => 'META',
'rsakv' => $info['rsakv'],
'savestate' => 7,
'servertime' => $info['servertime'],
'service' => 'miniblog',
'sp' => encode_password($info['pubkey'], $password, $info['servertime'], $info['nonce']),
'ssosimplelogin' => 1,
'su' => encode_username($username),
'url' => $feedbackurl,
'useticket' => 1,
'vsnf' => 1,
);
$url = makeUrl('http://login.sina.com.cn/sso/login.php', array(
'client' => 'ssologin.js(v1.4.2)',
), FALSE);
$response = curl_request($url, REQUEST_METHOD_POST, $datas);
$sign = 'location.replace(\'';
$response = substr($response, strpos($response, $sign) + strlen($sign));
$location = substr($response, 0, strpos($response, '\''));
$response = curl_request($location);
$length = strlen($response);
$left = 0;
$right = $length - 1;
while ( $left < $length )
if ( $response[$left] == '{' ) break;
else $left ++;
while ( $right > 0 )
if ( $response[$right] == '}' ) break;
else $right --;
$response = substr($response, $left, $right - $left + 1);
return json_decode($response, true);
}

$info = prepare_login_info();
$info = login($info, '用户名', '密码');
echo curl_request('http://weibo.com/u/' . $info['userinfo']['uniqueid'] . $info['userinfo']['userdomain']);
...全文
11042 98 打赏 收藏 转发到动态 举报
写回复
用AI写文章
98 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckgez 2013-09-07
  • 打赏
  • 举报
回复
Mark!
angelhater 2013-04-08
  • 打赏
  • 举报
回复
看完了两位的激烈讨论和沟通,感觉真是过瘾,什么时候我也能这么牛!
szlmwbnmc 2012-12-06
  • 打赏
  • 举报
回复
好东西啊,支持一下。
zxc4739 2012-10-25
  • 打赏
  • 举报
回复
NX 学习下
LAONINGA098 2012-10-23
  • 打赏
  • 举报
回复
新人过来看看高手
jshyjyw 2012-10-23
  • 打赏
  • 举报
回复
好贴留位。
A_A1210524033 2012-10-22
  • 打赏
  • 举报
回复
这个好长啊,看晕了…
wqllmwqllm 2012-10-21
  • 打赏
  • 举报
回复
体会体会、、、、、、、、
sdfasdfdsfe 2012-10-20
  • 打赏
  • 举报
回复
感谢楼主分享
sdfasdfdsfe 2012-10-20
  • 打赏
  • 举报
回复
感谢楼主分享
qntmd 2012-10-20
  • 打赏
  • 举报
回复
非常好,谢谢!
小春yeah 2012-10-19
  • 打赏
  • 举报
回复
感谢楼主分享
  • 打赏
  • 举报
回复
楼主真给力!
leeappleasd 2012-10-19
  • 打赏
  • 举报
回复
很详尽,感谢了
shumakaisa 2012-10-19
  • 打赏
  • 举报
回复
学习了,感谢楼主
hfshfs520dxcn 2012-10-18
  • 打赏
  • 举报
回复
楼主真给力!
zdxzhengdongxizdx 2012-10-18
  • 打赏
  • 举报
回复
O(∩_∩)O谢谢。
linxiyixin1 2012-10-17
  • 打赏
  • 举报
回复
谢谢楼主分享!
jy725 2012-10-17
  • 打赏
  • 举报
回复
感谢分享
taobxj2 2012-10-17
  • 打赏
  • 举报
回复
写的非常经典
加载更多回复(78)
YiiPin是一款精仿《美丽说》网站的社会化购物分享系统程序,让您轻松拥有一个媲美《美丽说》、《蘑菇街》等网站的淘宝客网站,并且支持当当联盟、拍拍客联盟等十几家购物网站商品抓取分享。   系统采用了当下最先进的PHP技术,底层MVC框架采用Yii Framework 1.10,语言采用PHP5.2,数据库采用MySQL5.0,系统强壮,安全性好,运行稳定,且在表现层上采用JQUERY无刷新交互技术,大大提高了用户体验。 系统对商品分享自动进行中文分词生成标签,并可自动判断宝贝所属分类,降低了分享的复杂度和管理的工作量。 系统采用向导式安装程序,无经验的站长用户也可以轻松完成安装部署。 系统设计了大量自定义功能,所有前台表现要素都可以自行定义。 系统支持淘宝客采集功能,只要设置好宝贝分类和要采集的关键词,即可方便获取淘宝客推广商品,并且支持用户马甲模拟发布,让您轻松搭建一个完整的淘宝客站点。 YiiPin主要功能列表: 用户注册,支持通过新浪微博、QQ互联注册,注册后将与本站会员捆绑,以后即可采用第三方登录; 用户登录,支持通过新浪微博、QQ账号直接登录,并可与网站现有会员进行捆绑; 忘记密码、找回密码功能,通过注册邮箱发送链接完成,安全有效; 分享宝贝,通过输入、粘贴各大电商网站的宝贝详情页面地址,即可实现商品抓取,自动识别淘宝客商品、拍拍客商品等,自动转换点击地址为推广地址,同时自动抓取商品大图,分享到用户杂志,并可快捷创建杂志。 分享图片,通过本地上传,可以方便的分享精彩图片到用户杂志。 创建杂志,可以创建属于网站任何分类的杂志,也就是专辑。 拾宝工具,通过书签栏即可实现拾宝工具,支持各种浏览器,用户只需拖入书签栏即可实现在浏览其他网站时,分享商品、图片到YiiPin系统,方便快捷。 翻杂志,分门别类的展示杂志,可将精彩内容曝光;新晋杂志、TOP10等栏目展示了最新、最热的杂志。 逛宝贝,默认显示最新分享的商品,可以切换为24小时最热、7天最热等; 分类浏览,可根据类别、子类、标签等分类浏览商品,采用瀑布流沉浸式布局,并可切换最新、最热排序。 收进杂志,采用无刷新AJAX弹窗,用户可以将任何喜欢的分享商品收进自己的某个杂志中,并附加自己的点评等; 喜欢,用户可以对任何商品标记喜欢,相当于商品收藏夹功能 评论,对商品分享做出评论,可以使用丰富可爱的表情; 关注杂志,通过关注一个杂志,当该杂志有新增的分享时,用户将在“我的首页”和右上角“消息”处收到更新通知; 关注用户,通过关注一个用户,可自动关注其所有的杂志、分享; 搜索,可以搜索分享、用户、杂志等; 个人主页,将用户的杂志、分享、喜欢、关注的杂志等进行集中展示; 美丽宣言,充分展示个性; 用户个性标签,给自己贴上个性的标签; 提示关注,当用户第一次进入个人主页,系统将会推荐一些用户给他关注; 关注我的、我关注的,可以查看关注情况,并可发送站内信息; 系统消息,并可单独删除某条系统消息; 设置账号,可以设置个人信息,拍摄、上传、裁剪头像,并可修改密码; 帮助中心,对网站操作等进行帮助说明 关于我们,网站介绍文字均可后台修改设置 友情链接,可以设定首页链接、内页链接等,分为图片、文字两种; 最新动态,通知用户一些相关动态,比如谁关注了我等; 我的首页,用户登录后首页即切换为我的首页,包含了自己分享的宝贝、关注的杂志中的宝贝以及喜欢的宝贝等,并可推荐杂志和用户给他进行关注。 未登录用户首页,对宝贝进行分门别类展示。 广告功能,基于广告位、广告模板的广告管理,高效实用 数据库备份恢复,保证数据安全 完善的后台管理。 YiiPin购物分享系统1.3正式发布了【20130129版】! 经过紧张开发,我们为大家带来了YiiPin购物分享系统1.3版本,该版本主要有以下变化: (新增)试用频道 (变更)支持淘宝远程图片,同时支持其他网站和图片分享本地图片(商品维护后将自动变更为远程淘宝图片,删除本地淘宝图片) (取消)删除云存储支持(徒增复杂度,很少用到) (新增)调整系统架构以支持主题更换(主题后续奉上) (增强)淘宝客商品采集增加设置记忆功能 (增强)淘宝客商品采集增加关键词排除功能 (新增)安装包增加IIS7.0干净URL配置文件 (修正)UCenter中已有用户同步登录到系统无法自动注册的BUG (增强)前台分享商品增加重复商品检测,如果存在则自动分享已有商品 (增强)前台分享商品增加30秒内重复分享屏蔽 (增强)后台增加新浪微博、QQ登录验证META设置 (新增)淘宝商品采集增加店铺搜索采集功能,不受API权限限制,并结合好店展示 (增强)后台淘宝客采集增加总成交量限制条件 (增强)后台淘宝客采集增加记录商品成交量、推广量、佣金比例和佣金信息 (增强)后台淘宝客采集流程、稳定性优化,改为先分析数据,再商品入库、图片下载 (增强)后台淘宝客采集增加中断继续功能 (修正)修正淘宝评论采集的一个BUG,增强稳定性 (增强)后台淘宝客采集增加API调用超限错误提示 (增强)后台增加URL后缀设置,如.html (增强)淘宝评论采集增加关键词过滤功能 (增强)淘宝商品主图如果下载失败再次被浏览时重试下载 (新增)淘宝商品采集新增天猫精品库采集功能 (修正)焦点图幻灯显示最后一张图不显示的BUG (增强)后台增加分享管理 (增强)第三方登录现在可选自动注册用户了,更加方便 (增强)好店增加店铺品牌和品牌介绍属性,并显示在店铺、商品分享页面 (增强)宝贝外链采用JS加密跳转,更利于SEO (增强)逛宝贝和分类页面标题增加标签名称,更利于SEO (优化)宝贝列表页面等大幅度降低数据库查询数量,提高运行速度 (增强)后台商品管理列表改为100项每页,增加批量分类功能 (增强)后台商品管理增加淘客佣金比例、30天推广量和成交量显示,便于筛选管理 (优化)商品列表页面默认排序按照淘客30天内成交量倒序排列
全球首款在移动端打造的微电影、微视频拍摄美化应用。它模拟电影创作全流程,整合了前期拍摄、后期制作、分享传播为一体的一站式应用,在移动应用摄影美化类别中前所未有。小影独特的滤镜、转场、字幕、配乐以及一键应用的主题特效包,可以让你轻松打造个性十足的生活微电影!如此极易上手且功能强大的应用,除了小影,还有谁能够记录你的精彩微生活呢! 小影软件特点: 【前期拍摄】 ◎手机端首创多镜头/分镜头拍摄,让捕捉的场景更立体,更饱满。 ◎支持大量最新、最潮的个性实时滤镜,玩转微电影、微视频。 ◎内置高性能专业摄像机引擎,秒杀系统自带摄像机。 【后期制作】 ◎基于逐帧的可视化视频裁剪功能,轻松快速的剔除多余镜头。 ◎简易的配乐剪切、音量调节功能,打造个性音响效果。 ◎多种滤镜、转场、字幕素材,创作微电影就是这么容易。 ◎提供基于不同场景的主题特效包,一键制作风格大片。 ◎ 素材中心,海量主题、滤镜、转场、海报素材等你下载。 【分享传播】 ◎随时随地一键分享你的精彩微视频,新浪微博、微信、QQ空间、腾讯微博、人人等总有你的一席之地。 ◎支持视频私密分享。 ◎自动生成个性十足的多种电影海报,让社交分享变得更酷更直接。 ◎基于移动平台的视频云计算存储平台,让你的故事可以在手机/平板/电脑/电视全平台上自如传播。 小影更新日志: 1、新增关注功能,和小伙伴们粉起来; 2、视频评论吐槽功能全面上线,一起来沙发吧; 3、视频个人空间可装扮,瞬间觉得萌萌哒; 4、新增视频达人推荐,网络大咖都在这; 5、全新的消息系统,随时了解你和粉丝的互动; 6、新增多款炫酷的动态转场特效; 小影截图: 小影二维码扫描下载:

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧