Heim >Backend-Entwicklung >PHP-Tutorial >php 新浪通行证、新浪微博模拟统一登录 (后台网页抓取版) 2016

php 新浪通行证、新浪微博模拟统一登录 (后台网页抓取版) 2016

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-23 13:10:011716Durchsuche

前几天做了一个Java的新浪通行证模拟登录测试。现在给大家一个php的新浪通行证、微博登录的示例:具体都有备注,大家阅读代码吧.

<?php /** * tom 2016年4月12日10:37:08 模拟微博登录 */class login_weibo {	// 微博用户名称密码	private $username = '';	private $password = '';	//请求cookie	private $request_cookie = '';	//预登陆返回json	private $json_obj = null;	//请求头	private $request_headers = array (				'Host' => 'login.sina.com.cn',				'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0',				'Accept' => '*/*',				'Accept-Language' => 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',				'Accept-Encoding' => 'gzip, deflate',				'Referer' => 'http://login.sina.com.cn/',				'Connection' => 'keep-alive' 		);	//base64加密后用户名	private $su = '';	//js加密后的密码	private $sp = '';	function __construct() {	}		//预登陆	function pre_login() {		// 用户名称base64加密-用于预登陆		$this->su = base64_encode ( urlencode ( $this->username ) );		// 预登陆url		$pre_login_url = 'http://login.sina.com.cn/sso/prelogin.php?entry=account&callback=sinaSSOController.preloginCallBack&su=';		$pre_login_url = $pre_login_url . $this->su . '&rsakt=mod&client=ssologin.js(v1.4.15)&_=' . time ();				$return_val = $this->request_url ( $pre_login_url, null, $this->request_cookie, $this->request_headers);		list ( $header, $body ) = explode ( "\r\n\r\n", $return_val, 2 );		preg_match_all ( "/Set\-Cookie:([^;]*);/", $header, $matches );		$info ['cookie'] = $matches;		$info ['header'] = $header;		$info ['content'] = $body;		$this->request_cookie .= $matches;		$body = str_replace('sinaSSOController.preloginCallBack(', '', $body);		$json = str_replace(')', '', $body);		$this->json_obj = json_decode($json);		//ajax后变量重置,所以存到cookie		param::set_cookie('sina_su', $this->su);		param::set_cookie('sina_cookie', $this->request_cookie);		param::set_cookie('sina_servertime', $this->json_obj->servertime);		param::set_cookie('sina_nonce', $this->json_obj->nonce);		param::set_cookie('sina_rsakv', $this->json_obj->rsakv);				//加密明文密码		$this->ajax_pwd_encode();	}		//根据预登陆返回信息,登录	function account_login() {		//登录url		$login_url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_='.time();		$this->request_headers['Content-Type'] = 'application/x-www-form-urlencoded';		//登录所需数据		$post_data['entry'] = 'account';		$post_data['gateway'] = '1';		$post_data['from'] = '';		$post_data['savestate'] = '0';		$post_data['useticket'] = '0';		$post_data['pagerefer'] = '';		$post_data['vsnf'] = '1';		$post_data['su'] = param::get_cookie('sina_su');		$post_data['service'] = 'sso';		$post_data['servertime'] = param::get_cookie('sina_servertime');		$post_data['nonce'] = param::get_cookie('sina_nonce');		$post_data['pwencode'] = 'rsa2';		$post_data['rsakv'] = param::get_cookie('sina_rsakv');		$post_data['sp'] = $this->sp;		$post_data['sr'] = '1366*768';		$post_data['encoding'] = 'UTF-8';		$post_data['cdult'] = '3';		$post_data['domain'] = 'sina.com.cn';		$post_data['prelt'] = '51';		$post_data['returntype'] = 'TEXT';		//登录		$data = $this->request_url($login_url, $post_data, $this->request_cookie, $this->request_headers);		//获取返回cookie 及 json数据		list ( $header, $body ) = explode ( "\r\n\r\n", $data, 2 );		//保存cookie		$this->save_cookie($header);		$json_login = json_decode($body);		//访问返回json链接		$domain_urls = $json_login->crossDomainUrlList;		$i = 0;		foreach ($domain_urls as $v) {			$req_url = $v.'&callback=sinaSSOController.doCrossDomainCallBack&scriptId=ssoscript'.$i.'&client=ssologin.js(v1.4.15)&_='.time();			$req_data = $this->request_url ( $req_url, null, $this->request_cookie, array(), 0);			// 			list ( $header, $body ) = explode ( "\r\n\r\n", $data, 2 );// 			$this->save_cookie($header);			$i ++;		}	}		function save_cookie($header) {		$headers = explode('\r\n', $header);		foreach ($headers as $v) {			$tmp = explode("\r\n", $v);			foreach ($tmp as $it) {				$pos = strpos($it, 'Set-Cookie');				if ($pos !== false) {					$cv = explode(":", $it);					$this->request_cookie .= $cv[1].';';				}			}		}	}		function sina_login() {		//获取加密后的密码		$this->sp = $_GET['sp'];		//账号登录		$this->account_login();		//重定向到新浪通行证页面 		$this->request_cookie = trim($this->request_cookie); 		$this->request_headers['Content-Type'] = 'text/html'; 		$url = 'http://login.sina.com.cn';		//返回的html 		$html = $this->request_url($url, null, $this->request_cookie, $this->request_headers, 0);	}		//调用js 加密密码	function ajax_pwd_encode() {		echo "<script type="text/javascript" src="%22.APP_PATH.JS_PATH.%22lib/jquery.min.1.7.2.js"></script>";		echo 			var sinaSSOEncoder=sinaSSOEncoder||{};(function(){var hexcase=0;var chrsz=8;this.hex_sha1=function(s){return binb2hex(core_sha1(str2binb(s),s.length*chrsz));};var core_sha1=function(x,len){x[len>>5]|=0x80>9)>16)+(y>>16)+(lsw>>16);return(msw>>(32-cnt));};var str2binb=function(str){var bin=Array();var mask=(1>5]|=(str.charCodeAt(i/chrsz)&mask)>2]>>((3-i%4)*8+4))&0xF)+hex_tab.charAt((binarray[i>>2]>>((3-i%4)*8))&0xF);}return str;};this.base64={encode:function(input){input=''+input;if(input=='')return '';var output='';var chr1,chr2,chr3='';var enc1,enc2,enc3,enc4='';var i=0;do{chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)>4);enc3=((chr2&15)>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64;}else if(isNaN(chr3)){enc4=64;}output=output+this._keys.charAt(enc1)+this._keys.charAt(enc2)+this._keys.charAt(enc3)+this._keys.charAt(enc4);chr1=chr2=chr3='';enc1=enc2=enc3=enc4='';}while(i<input.length output dbits canary="0xdeadbeefcafe;var" j_lm="((canary&0xffffff)==0xefcafe);function" biginteger a if this.fromstring nbi new am1>=0){var v=x*this[i++]+w[j]+c;c=Math.floor(v/0x4000000);w[j++]=v&0x3ffffff;}return c;}function am2(i,x,w,j,c,n){var xl=x&0x7fff,xh=x>>15;while(--n>=0){var l=this[i]&0x7fff;var h=this[i++]>>15;var m=xh*l+h*xl;l=xl*l+((m&0x7fff)>>30)+(m>>>15)+xh*h+(c>>>30);w[j++]=l&0x3fffffff;}return c;}function am3(i,x,w,j,c,n){var xl=x&0x3fff,xh=x>>14;while(--n>=0){var l=this[i]&0x3fff;var h=this[i++]>>14;var m=xh*l+h*xl;l=xl*l+((m&0x3fff)>28)+(m>>14)+xh*h;w[j++]=l&0xfffffff;}return c;}BigInteger.prototype.am=am3;dbits=28;BigInteger.prototype.DB=dbits;BigInteger.prototype.DM=((1=0;--i)r[i]=this[i];r.t=this.t;r.s=this.s;}function bnpFromInt(x){this.t=1;this.s=(x0)this[0]=x;else if(x=0){var x=(k==8)?s[i]&0xff:intAt(s,i);if(xthis.DB){this[this.t-1]|=(x&((1>(this.DB-sh));}else  this[this.t-1]|=x=this.DB)sh-=this.DB;}if(k==8&&(s[0]&0x80)!=0){this.s=-1;if(sh>0)this[this.t-1]|=((10&&this[this.t-1]==c)--this.t;}function bnToString(b){if(this.s0){if(p<this.db>>p)>0){m=true;r=int2char(d);}while(i>=0){if(p<k>>(p+=this.DB-k);}else{d=(this[i]>>(p-=k))&km;if(p0)m=true;if(m)r+=int2char(d);}}return m?r:'0';}function bnNegate(){var r=nbi();BigInteger.ZERO.subTo(this,r);return r;}function bnAbs(){return(this.s=0)if((r=this[i]-a[i])!=0)return r;return 0;}function nbits(x){var r=1,t;if((t=x>>>16)!=0){x=t;r+=16;}if((t=x>>8)!=0){x=t;r+=8;}if((t=x>>4)!=0){x=t;r+=4;}if((t=x>>2)!=0){x=t;r+=2;}if((t=x>>1)!=0){x=t;r+=1;}return r;}function bnBitLength(){if(this.t=0;--i)r[i+n]=this[i];for(i=n-1;i>=0;--i)r[i]=0;r.t=this.t+n;r.s=this.s;}function bnpDRShiftTo(n,r){for(var i=n;i<this.t bnplshiftto bs="n%this.DB;var" cbs="this.DB-bs;var" bm="(1<<cbs)-1;var" ds="Math.floor(n/this.DB),c=(this.s<<bs)&this.DM,i;for(i=this.t-1;i">=0;--i){r[i+ds+1]=(this[i]>>cbs)|c;c=(this[i]&bm)=0;--i)r[i]=0;r[ds]=c;r.t=this.t+ds+1;r.s=this.s;r.clamp();}function bnpRShiftTo(n,r){r.s=this.s;var ds=Math.floor(n/this.DB);if(ds>=this.t){r.t=0;return;}var bs=n%this.DB;var cbs=this.DB-bs;var bm=(1>bs;for(var i=ds+1;i<this.t>>bs;}if(bs>0)r[this.t-ds-1]|=(this.s&bm)>=this.DB;}if(a.t<this.t>>=this.DB;}c+=this.s;}else{c+=this.s;while(i<a.t>>=this.DB;}c-=a.s;}r.s=(c0)r[i++]=c;r.t=i;r.clamp();}function bnpMultiplyTo(a,r){var x=this.abs(),y=a.abs();var i=x.t;r.t=i+y.t;while(--i>=0)r[i]=0;for(i=0;i<y.t bnpsquareto x="this.abs();var" i="r.t=2*x.t;while(--i">=0)r[i]=0;for(i=0;i<x.t-1 c="x.am(i,x[i],r,2*i,0,1);if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1))">=x.DV){r[i+x.t]-=x.DV;r[i+x.t+1]=1;}}if(r.t>0)r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);r.s=0;r.clamp();}function bnpDivRemTo(m,q,r){var pm=m.abs();if(pm.t0){pm.lShiftTo(nsh,y);pt.lShiftTo(nsh,r);}else{pm.copyTo(y);pt.copyTo(r);}var ys=y.t;var y0=y[ys-1];if(y0==0)return;var yt=y0*(11)?y[ys-2]>>this.F2:0);var d1=this.FV/yt,d2=(1=0){r[r.t++]=1;r.subTo(t,r);}BigInteger.ONE.dlShiftTo(ys,t);t.subTo(y,y);while(y.t<ys>=0){var qd=(r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);if((r[i]+=y.am(0,qd,r,j,0,ys))<qd>0)r.rShiftTo(nsh,r);if(ts0)a.subTo(r,r);return r;}function Classic(m){this.m=m;}function cConvert(x){if(x.s=0)return x.mod(this.m);else return x;}function cRevert(x){return x;}function cReduce(x){x.divRemTo(this.m,null,x);}function cMulTo(x,y,r){x.multiplyTo(y,r);this.reduce(r);}function cSqrTo(x,r){x.squareTo(r);this.reduce(r);}Classic.prototype.convert=cConvert;Classic.prototype.revert=cRevert;Classic.prototype.reduce=cReduce;Classic.prototype.mulTo=cMulTo;Classic.prototype.sqrTo=cSqrTo;function bnpInvDigit(){if(this.t0)?this.DV-y:-y;}function Montgomery(m){this.m=m;this.mp=m.invDigit();this.mpl=this.mp&0x7fff;this.mph=this.mp>>15;this.um=(10)this.m.subTo(r,r);return r;}function montRevert(x){var r=nbi();x.copyTo(r);this.reduce(r);return r;}function montReduce(x){while(x.t>15)*this.mpl)&this.um)=x.DV){x[j]-=x.DV;x[++j]++;}}x.clamp();x.drShiftTo(this.m.t,x);if(x.compareTo(this.m)>=0)x.subTo(this.m,x);}function montSqrTo(x,r){x.squareTo(r);this.reduce(r);}function montMulTo(x,y,r){x.multiplyTo(y,r);this.reduce(r);}Montgomery.prototype.convert=montConvert;Montgomery.prototype.revert=montRevert;Montgomery.prototype.reduce=montReduce;Montgomery.prototype.mulTo=montMulTo;Montgomery.prototype.sqrTo=montSqrTo;function bnpIsEven(){return((this.t>0)?(this[0]&1):this.s)==0;}function bnpExp(e,z){if(e>0xffffffff||e=0){z.sqrTo(r,r2);if((e&(10)z.mulTo(r2,g,r);else{var t=r;r=r2;r2=t;}}return z.revert(r);}function bnModPowInt(e,m){var z;if(e>8)&255;rng_pool[rng_pptr++]^=(x>>16)&255;rng_pool[rng_pptr++]^=(x>>24)&255;if(rng_pptr>=rng_psize)rng_pptr-=rng_psize;}function rng_seed_time(){rng_seed_int(new Date().getTime());}if(rng_pool==null){rng_pool=new Array();rng_pptr=0;var t;while(rng_pptr<rng_psize>>>8;rng_pool[rng_pptr++]=t&255;}rng_pptr=0;rng_seed_time();}function rng_get_byte(){if(rng_state==null){rng_seed_time();rng_state=prng_newstate();rng_state.init(rng_pool);for(rng_pptr=0;rng_pptr<rng_pool.length rng_state.next rng_get_bytes i securerandom parsebigint new biginteger linebrk ret="" byte2hex return b.tostring pkcs1pad2 null ba="new" array>=0&&n>0){var c=s.charCodeAt(i--);if(c127)&&(c>6)|192;}else{ba[--n]=(c&63)|128;ba[--n]=((c>>6)&63)|128;ba[--n]=(c>>12)|224;}}ba[--n]=0;var rng=new SecureRandom();var x=new Array();while(n>2){x[0]=0;while(x[0]==0)rng.nextBytes(x);ba[--n]=x[0];}ba[--n]=2;ba[--n]=0;return new BigInteger(ba);}function RSAKey(){this.n=null;this.e=0;this.d=null;this.p=null;this.q=null;this.dmp1=null;this.dmq1=null;this.coeff=null;}function RSASetPublic(N,E){if(N!=null&&E!=null&&N.length>0&&E.length>0){this.n=parseBigInt(N,16);this.e=parseInt(E,16);}else alert('Invalid RSA public key');}function RSADoPublic(x){return x.modPowInt(this.e,this.n);}function RSAEncrypt(text){var m=pkcs1pad2(text,(this.n.bitLength()+7)>>3);if(m==null)return null;var c=this.doPublic(m);if(c==null)return null;var h=c.toString(16);if((h.length&1)==0)return h;else return '0'+h;}RSAKey.prototype.doPublic=RSADoPublic;RSAKey.prototype.setPublic=RSASetPublic;RSAKey.prototype.encrypt=RSAEncrypt;this.RSAKey=RSAKey;}).call(sinaSSOEncoder);function getpass(pwd,servicetime,nonce,rsaPubkey){var RSAKey=new sinaSSOEncoder.RSAKey();RSAKey.setPublic(rsaPubkey,'10001');var password=RSAKey.encrypt([servicetime,nonce].join('\\t')+'\\n'+pwd);return password;}		EOT;		echo "			<script type="text/javascript">			var url = '".APP_PATH."index.php?m=admin&c=login_weibo&a=sina_login';			var encrpt = getpass('".$this->password."', ".$this->json_obj->servertime.", '".$this->json_obj->nonce."', '".$this->json_obj->pubkey."');			//$.post(url, {sp:encrpt});			window.location.href='".APP_PATH."index.php?m=admin&c=login_weibo&a=sina_login&sp='+encrpt;			</script>";	}		/**	 * 模拟post、get请求	 *	 * @param string $url        		 * @param array $post_data	 *        	null时,get请求	 * @param string $request_cookie        		 */	function request_url($url = '', $post_data = array(), $request_cookies = '', $request_headers = '', $return_cookie=1) {		if (empty ( $url )) {			return false;		}		$is_post = false;		if (! empty ( $post_data ) && is_array ( $post_data )) {			$o = "";			foreach ( $post_data as $k => $v ) {				$o .= "$k=" . urlencode ( $v ) . "&";			}			$post_data = substr ( $o, 0, - 1 );			$is_post = true;		}				$ch = curl_init (); // 初始化curl		curl_setopt ( $ch, CURLOPT_URL, $url ); // 抓取指定网页		curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); // 要求结果为字符串且输出到屏幕上		if ($is_post) {			curl_setopt ( $ch, CURLOPT_POST, 1 ); // post提交方式			curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data ); // post数据		} 		curl_setopt ( $ch, CURLOPT_COOKIE, $request_cookies ); // 请求cookie		curl_setopt ( $ch, CURLOPT_HEADER, $return_cookie); // 返回cookie到头		curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 120 );		curl_setopt ( $ch, CURLOPT_HTTPHEADER, $request_headers );		curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1);		$data = curl_exec ( $ch ); // 运行curl		curl_close ( $ch );		return $data;	}}?></rng_pool.length></rng_psize></qd></ys></x.t-1></y.t></a.t></this.t></this.t></this.t></k></this.db></input.length>


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:php判断在那种方式下运行Nächster Artikel:php CI 中的日期