模拟新浪微博自动登陆_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > 模拟新浪微博自动登陆

模拟新浪微博自动登陆

 2013/9/15 17:46:17  wbj0110  程序员俱乐部  我要评论(0)
PHP code class="clipboardWindowBtn">? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 monospace !important;" class="php plain"><?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']);
发表评论
用户名: 匿名