En primer lugar, necesita una cuenta de desarrollador de Weibo. Lo que necesitamos es la clave de aplicación, la aplicación Secre y Redirect_uri. La compañía originalmente tenía este paso, por lo que lo salvó. Hay muchas búsquedas en Baidu.
Ok, comencemos ahora:
Primero encontré este código en línea y escribí el enlace aquí
Estaba muy feliz de resolverlo al mismo tiempo; Pero el error " Falló la actualización de token ". Después de leer el código, devolví 200, no 302, y estaba un poco confundido. No importa cómo estudié por qué sucedió esto primero, puse la URL que generó en el navegador y la leí. Ingresé a la página de autorización y no necesitaba iniciar sesión primero. Después de mirar F12, eran de hecho 200, así que supongo que fue porque no inicié sesión con éxito, así que comencé a iniciar sesión en Weibo Backend para encontrar dicho código. La dirección original ha sido olvidada, y el autor original está avergonzado.
paquete com.spider.httpClient; import java.io.bufferedReader; import java.io.ioexception; import java.io.inputstream; import java.io.inputstreamreader; import java.net.uri; import java.net.urisynynTaxException; import java.net.urlaCoder; import javaRAYLIST; java.util.date; import java.util.list; import javax.script.Invocable; import javax.script.scriptEngine; import javax.script.scriptengineManager; import javax.script.scriptException; import org.apache.commons.codec.binary.bine64; import org.apache.htttttter; org.apache.http.httpentity; import org.apache.http.httpresponse; import org.apache.http.nameValuePair; importar org.apache.http.client.clientprotocolexception; import org.apache.http.client.httpclient; import; import; importar; importar; importar; import org.apache.http.client.config.cookiespecs; import org.apache.http.client.entity.urlencodedformentity; import org.apache.http.client.methods.httpget; import org.apache.http.client.methods.htppost; import org.apache.http.config.registry; import org.apache.http.config.registryBuilder; importar org.apache.http.cookie.cookiespec; import org.apache.http.cookie.cookiesprovider; import org.apache.http.impl.bsat.bas org.apache.http.impl.client.httpClients; importar org.apache.http.impl.cookie.defaultcookiespec; importar org.apache.htp.impl.cookie.defaultcookiespecprovider; import org.apache.http.message org.apache.http.protocol.httpContext; import org.apache.http.util.entityutils; import com.alibaba.fastjson.jsonarray; import com.alibaba.fastjson.jsonObject;/*** Sina Weibo Login, 7 de abril, 2016 08:30:16, la contraseña de adopción de contraseña; El método de cifrado está en js * * @author tom * */public class Sinaweibologger {private httpclient cliente; Publicación privada de httpost; httpget privado get; Private BasicCookiestore Cookiestore; nombre de usuario de cadena privada; // Contrase de cadena privada de cuenta de texto de texto sin formato; // Contraseña de texto sin formato Cadena privada SU; // Base64 Cuenta cifrada Cadena privada SP; // Contraseña encriptada RSA // Los datos requeridos para la información previa a la sesión inician un tiempo de vigilancia privado largo; // Servidor TimeStamp String Nonce; // El servidor Devuelve la cadena de cadena privada rsakv; // El servidor devuelve la cadena, y la contraseña de cifrado RSA es privada String PubKey; // El servidor devuelve la clave pública de cifrado RSA, utilizada para el cifrado RSA private int retrode; // Valor de estado Private String PCID; privado int is_openlock; privado int showpin; ejecución privada int; // finaliza la información previa al login // devuelve datos JSON después de inicio de sesión en cadena privada uid; cadena privada nick; Domainurls de Jsonarray privado; // private StringBuffer Headercookie = new StringBuffer (); // Iniciar contraseña encripta el contenido del archivo JS Cadena estática privada Sina_JS = "var sinsoCoder = sinsoCoder || {}; (function () {var hexcase = 0; var chrsz = 8; this.hex_sha1 = function (s) {return binb2Hex (core_sha1 (str2binb (s), s.llerte*; core_sha1 = function (x, len) {x [len >> 5] | = 0x80 << (24-Len%32); x [(len+64 >> 9) << 4) +15] = len; var w = array (80); var a = 1732584193; var b = -27171733879; var c = -1732584141419444194194194194419419419419411941 ACCIÓN d = 27173333878; var e = -1009589776; for (var i = 0; i <x.length; i+= 16) {var OldA = a; var OldB = b; var Oldc = c; var Oldd = d; var Old = e; para (var j = 0; j <80; j ++) {if (j <16) w [j] = x [i+j] más w [j] = rol (w [j-3]^w [j-8]^w [j-14]^w [j-16], 1); var t = safe_add (safe_add (rol (a, 5), sha1_ft (j, b, c, d)), safe_add (safe_add (e, w [j]), sha1_kt (j))); e = d; d = c; c = rol (b, 30) ; b = a; a = t;} a = safe_add (a, OldA); b = safe_add (b, oldb); c = safe_add (c, oldc); d = safe_add (d, oldd); e = safe_add (e, Old);};} array de retorno (a, b, c, d, e);}; var sha1_ft = function (t, b, c, d) {if (t <20) return (b & c) | (~ b) & d); if (t <40) return b^c^d; if (t <60) return (b & c) | (b & d) | (c & d); (c & c &); return b^c^d;}; Var) sha1_kt = function (t) {return (t <20)? 1518500249: (t <40)? 18597775393: (t <60)?-1894007588: -8999997514;}; var safe_add = function (x, y) {var lsw = (x & 0xff)+(y & 0xff); var; msw = (x >> 16)+(y >> 16)+(lsw >> 16); return (msw << 16) | (lsw & 0xfff);}; var rol = function (num, cnt) {return (num << cnt) | (num >>> (32-cnt));}; var str2binb = function (str) máscara = (1 << chrsz) -1; para (var i = 0; i <str.length*chrsz; i+= chrsz) bin [i >> 5] | = (str.charcodeat (i/chrsz) & Mask) << (24-i%32); return bin;}; var binb2Hex = function (binarray) {var) hex_tab = hexcase? '0123456789abcdef': '0123456789abcdef'; var str = ''; for (var i = 0; i <binarRray.length*4 4; i ++) {str+= hex_tab.charat ((binarArray [i >> 2] >> ((3-i%4)*8+4)) & 0xf)+hex_tab.charat ((binarRray [i >> 2] >>> ((3-i%4)*8)) & 0xf);} str;}; this.base64 = {encodo: function (function (input) {input = ''+input; if (input == '' ') return' '; var output =' '; i = 0; do {chr1 = input.charcodeat (i ++); chr2 = input.charcodeat (i ++); chr3 = input.charcodeat (i ++); enc1 = chr1 >> 2; en c2 = ((chr1 y 3) << 4) | (chr2 >> 4); enc3 = ((chr2 y 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isnan (chr2)) {enc3 = enc4 = 64;} más 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);return salida;}, _ claves: 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/='};}). call (sinsoCoder) ;; (function () {var dbits; var canary = 0xDeadBeeFeFeFeFeFeFeS j_lm = ((Canary & 0xffffffff) == 0xefCafe); function bigInteger (a, b, c) {if (a! = null) if ('number' == typeof a) this.FromNumber (a, b, c); else if (b == null && 'string'! = typeOf a) this.fromstring (a, 256); this.FromString (a, b);} function nbi () {return new bigInteger (null);} function am1 (i, x, w, j, c, n) {while (-n> = 0) {var v = x*this [i ++]+w [j]+c; c = math.floor (v/0x400000000); w [j ++] = v & 0x3ffffffff;} return c;} function am2 (i, x, w, j, c, n) {var xl = x & 0x7ffff, xh = x >> 15; while (-n> = 0) { l = this [i] & 0x7ff; var h = this [i ++] >> 15; var m = xh*l+h*xl; l = xl*l+((m & 0x7ffff) << 15)+w [j]+(c & 0x3ffffffff); c = (l >>> 30)+(m >>> 15)+xh*h+(c >>> 30); W [j ++] = l & 0x3fffffffff;} regreso c;} Am3 (i, x, w, j, c, n) {var xl = x & 0x3ffff, xh = x >> 14; while (-n> = 0) {var l = this [i] & 0x3ffff; var h = this [i ++] >> 14; var h m = xh*l+h*xl; l = xl*l+((m & 0x3ffff) << 14)+w [j]+c; c = (l >> 28)+(m >> 14)+xh*h; w [j ++] = l & 0xffffff;} return c;} bigInteger.prototype.am = am3; dbits = 28; biginteger.prototype.db = dbits; bigInteger.prototype.dm = ((1 << dbits) -1); biginteger.prototype.dv = (1 << dbits); var var = Bi_fp = 52; biginteger.prototype.fv = math.pow (2, bi_fp); bigInteger.prototype.f1 = bi_fp-dbits; biginteger.prototype.f2 = 2*dbits-bi_fp; var; Bi_rm = '0123456789Abcdefghijklmnopqrstuvwxyz'; var bi_rc = new array (); var rr, vv; rr = '0'.charcodeat (0); for (vv = 0; vv <= 9; ++ vv) bi_rc [rr ++] = vv; rr =' a'.charcodeat (0); para (vv = 10 ; vv <36; ++ vv) bi_rc [rr ++] = vv; rr = 'a'.charcodeat (0); for (vv = 10; vv <36; ++ vv) bi_rc [rr ++] = vv; function; int2char (n) {return bi_rm.charat (n);} función intat (s, i) {var c = bi_rc [s.charcodeat (i)]; return (c == null)?-1: c;} función bnpCopyTo (r) {para (var (var) i = this.t-1; i> = 0;-i) r [i] = this [i]; rt = this.t; rs = this.s;} function bnpFromint (x) {this.t = 1; this.s = (x <0)?-1: 0; if (x> 0) this [0] = x; else if (x <-1) esto [0] = x+dv; nbv (i) {var r = nbi (); r.fromint (i); return r;} función bnpFromString (s, b) {var k; if (b == 16) k = 4; de lo contrario if (b == 8) k = 3; else if (b == 256) k = 8; else if (b == 2) k = 1; else if (b == 32) k = 5; if (b == 4) k = 2; else {this.fromradix (s, b); return;} this.t = 0; this.s = 0; var i = s.length, mi = false, sh = 0; while (-i> = 0) {var x = (k == 8)? S [i] & 0xff: intat (s, i); if (x <0) {if (s.charat (i) == '-') mi = true; continúa;} mi = false; if (sh == 0) this [this.t ++] = x; else; else; else; if (sh+k> this.db) {this [this.t-1] | = (x & ((1 << (this.db-sh))-1)) << sh; this [this.t ++] = (x >> (this.db-sh));} más esto [this.t-1] | = x << sh; sh+= k; if (sh> = this.db) sh- = this.db;} if (k == 8 && (s [0] & 0x80)! = 0) {this.s = -1; if (sh> 0) th es [this.t-1] | = ((1 << (this.db-sh))-1) << sh;} this.clamp (); if (mi) bigInteger.Zero.Subto (this, this);} function bnpClamp () {var c = this.s & this.dm; while (this.t> 0 && this [this.t-1] == c)-this.t;} function bnToString (b) {if (this.s <0) return '-'+this.negate (). toString (b); var k; if (b == 16) k = 4; else if ((otra) if (b == 2) k = 1; else if (b == 32) k = 5; de lo contrario if (b == 4) k = 2; de lo contrario devuelve esto.toradix (b); var km = (1 << k) -1, d, m = falso, r = '', i = this.t; var; var; var; var; var; var; var; var; p = this.db- (i*this.db)%k; if (i-> 0) {if (p <this.db && (d = this [i] >> p)> 0) {m = true; r = int2char (d);} while (i> = 0) {if (p <k) {d = (this [i] & (1 << p) -1)) (kp); d | = this [-i] >> (p+= this.db-k);} else {d = (this [i] >> (p- = k)) & km; if (p <= 0) {p+= this.db;-i;}} if (d> 0) m = verdadero; if (m) r+= int2char (d);}} m? r: '0';} function bnnegate () {var r = nbi (); bigInteger.zero.subto (this, r); return r;} function bnabs () {return (this.s <0)? this.negate (): this;} function bncomPareto (a) {var r = this.sa.s; if (((r! i = this.t; r = ia.t; if (r! = 0) return r; while (-i> = 0) if ((r = this [i] -a [i])! = 0) return r; return 0;} función 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;} función bnBitLength () {if (this.t <= 0) return 0; devuelve this.db*(this.t-1)+nbits (this [this.t-1]^(this.s & this.dm));} function bnbitlength () {if (this.t <= 0) return this.db*(this.t-1)+nbits (this [this.t-1]^(this.s & this.dm));} function bnpdlshiftto (n, r) {var i; para (i = this.t-1; i> = 0; -i) r [i+n] = this [i]; para (i = n-1; i> = 0; -i) r [i] = 0; rt = this.t+n; rs = this.s;} función bnpdrshiftTo (n, r) {for (var (var (var (var (var (var (var (var (var (var (var i = n; i <this.t; ++ i) r [in] = this [i]; rt = math.max (this.tn, 0); rs = this.s;} function bnplshiftTo (n, r) {var bs = n%this.db; var cbs = this.db-bs; var bm = (1 << cbs) -1; ds = math.floor (n/this.db), c = (this.s << bs) & this.dm, i; para (i = this.t-1; i> = 0;-i) {r [i+ds+1] = (this [i] >> cbs) | c; c = (this [[i] & bm) << bs;} para (i = ds-1; i> = 0; -i) r [i] = 0; r [ds] = c; rt = this.t+ds+1; rs = this.s; r.Clamp ();} function bnpRShiftTo(n,r){rs=this.s;var ds=Math.floor(n/this.DB);if(ds>=this.t){rt=0;return;}var bs=n%this.DB;var cbs=this.DB-bs;var bm=(1<<bs)-1;r[0]=this[ds]>>bs;for(var i = ds+1; i <this.t; ++ i) {r [i-dds-1] | = (this [i] & bm) << cbs; r [i-ds] = this [i] >> bs;} if (bs> 0) r [this.t-dds-1] | = (this.s & bm) << cbs; rt = this.t-dds; r.clamp ();} bnpsubto (a, r) {var i = 0, c = 0, m = Math.min (en, this.t); while (i <m) {c+= this [i] -a [i]; r [i ++] = c & this.dm; c >> = this.db;} if (en <at <this.t) {c- = as; is.dm; c >> = this.db;} c+= this.s;} else {c+= this.s; while (i <at) {c- = a [i]; r [i ++] = = c & this.dm; c >> = this.db;} c- = as;} rs = (c <0)?-1: 0; if (c <-1) r [i ++] = this.dv+c; de lo contrario if (c> 0) r [i ++] = c; rt = i; r.clamp ();} function bnpmultIllyto (a, r) {var x = this.abs (), y = a.abs (); var i = xt; rt = i+yt; while (-i> = 0) r [i] = 0; para (i = 0; i <yt; ++ i) r [i+xt] = x.am (0, y [i], r, i, 0, xt); rs = 0; r.Clamp (); if (this.s! = as) bigInteger.zero.subo bnpsquareto (r) {var x = this.abs (); var i = rt = 2*xt; while (-i> = 0) r [i] = 0; for (i = 0; i <xt-1; ++ i) {var) c = x.am (i, x [i], r, 2*i, 0,1); if ((r [i+xt]+= x.am (i+1,2*x [i], r, 2*i+1, c, xt-i-1))> = x.dv) {r [i+xt ]-= x.dv; r [i+x.t+1] = 1;}} if (rt> 0) r [rt-1]+= x.am (i, x [i], r, 2*i, 0,1); rs = 0; r.clamp ();} bnpdivremto (m, q, r) {var pm = m.abs (); if (pm.t <= 0) return; var pt = this.abs (); if (pt.t <pm.t) {if (q! = null) q.fromint (0); if (r! = null) this.copyto (r); return;} if (r == null) y = nbi (), ts = this.s, ms = ms; var nsh = this.db-nbits (pm [pm.t-1]); if (nsh> 0) {pm.lShiftTo (nsh, y); pt.lshiftTo (nsh, r);} más {pm.copyto (y); pt.copyto (r);} var yt; y0 = y [ys-1]; if (y0 == 0) return; var yt = y0*(1 << this.f1)+((ys> 1)? y [ys-2] >> this.f2: 0); var d1 = this.fv/yt, d2 = (1 << this.f1)/yt, e = 1 << this.f2; var.f2; i = rt, j = i-ys, t = (q == null)? nbi (): q; y.dlshiftto (j, t); if (r.comppareto (t)> = 0) {r [r.t ++] = 1; r.subto (t, r);} bigInteger.one.dlhiftto (ys, t); t.subto (y, y); while (yt <ys) y [y.t ++] = 0; while (-j> = 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) {y.dlshiftto (j, t); r.subto (t, r); while (r [i] <-qd) r.subto (t, r);}} if (q! = null) {r.drshiftto (ys, q); if (ts! = ms) biginteger.zero.subto (q, q);} rt = ys; r.clamp (); if (nsh> 0) r.rshiftto (nsh, r); if (ts <0) bigInteger.Zero.subto (r, r, r);} r = nbi (); this.abs (). Divremto (a, null, r); if (this.s <0 && r.c.c.c.c.con x.mod (this.m); else return x;} function corevert (x) {return x;} function creduce (x) {x.divremto (this.m, null, x);} function cmulto (x, y, r) {x.multiplyto (y, r); this.reduce (r);} función csqrto (x, r) {x.squareto (r); this.reduce (r);} clásico.prototype.convert = cconvert; clásico.prototype.revert = corevert; clásico.prototipo bnpinvdigit () {if (this.t <1) return 0; var x = this [0]; if ((x & 1) == 0) return 0; var; y = x & 3; y = (y*(2- (x & 0xf)*y)) & 0xf; y = (y*(2- (x & 0xff)*y)) & 0xff; y = (y*(2-((x & 0xffff)*y) y 0 xffff))) & 0xffff; y = (y*(2-x*y%this.dv))%this.dv; return (y> 0)? this.dv-y: -y;} función Montgomery (m) {this.m = m; this.mp = m.invdigit (); this.mpl = this.mp & 0x7ff; this.mph = this.mp >> 15; this.um = (1 << (m.db-15))-1; this.mt2 = 2*mt;} función MontConvert (x) {var r = nbi (); x.abs (). dlshiftto (this.mt, r); r.divremto (this.m, null, r); if (xs <0 && r.compareto (bigInteger.Zero)> 0) this.m.subto (r, r); return r;} MonTrevert (x) {Var r = nbi (); x.copyto (r); this.reduce (r); return r;} función montreduce (x) {while (xt <= this.mt2) x [x.t ++] = 0; para (var i = 0; i <this.mt; ++ i) {var j = x [i] & 0x7ff; var; var; u0 = (j*this.mpl+((((j*this.mph+(x [i] >> 15)*this.mpl) & this.um) << 15)) & x.dm; j = i+this.mt; x [j]+= this.m.am (0, u0, x, i, 0, this.mt); whil e (x [j]> = x.dv) {x [j]-= x.dv; x [++ j] ++;}} x.clamp (); x.drshiftto (this.mt, x); if (x.compareto (this.m)> = 0) x.subto (this.m, x);} función Montsqrto (x, r) {x.squareto (r); this.reduce (r);} función Montmulto (x, y, r) {x.multiplyto (y, r); this.reduce (r);} Montgomery.prototype.convert = MontConvert; Montgomery.prototype.revert = Montre vert; 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> 0xfffffffffffff || e <1) return bigInteger.one; var; r = nbi (), r2 = nbi (), g = z.convert (this), i = nbits (e) -1; g.copyto (r); while (-i> = 0) {z.sqrto (r, r2); if ((e & (1 << i))> 0) z.multo (r2, g, r); vAR); más { t = r; r = r2; r2 = t;}} return z.revert (r);} function bnmodPowInt (e, m) {var z; if (e <256 || m.iseven ()) z = nuevo clásico (m); else z = nuevo montgomery (m); return; this.EXP (e, z);} bigInteger.prototype.copyto = bnpCopyto; bigInteger.prototype.fromint = bnpFromint; bigInteger.prototype.fromstring = bnpFromString; iginteger.prototype.clamp = bnpClamp; bigInteger.prototype.dlshiftto = bnpdlshiftto; biginteger.prototype.dlshiftto = bnpdlshiftto; biginteger.protot ype.drshiftto = bnpdrshiftto; biginteger.prototype.lshiftto = bnplshiftto; biginteger.prototype.rshiftto = bnprshiftto; biginte ger.prototype.subto = bnpsubto; bigInteger.prototype.multiplyto = bnpmultiplyto; biginteger.prototype.squareto = bnpsquareto; bi ginteger.prototype.divremto = bnpdivremto; biginteger.prototype.invdigit = bnpinvdigit; biginteger.prototype.iseven = bnpiseve n; biginteger.prototype.exp = bnpexp; biginteger.prototype.ToString = bnToString; bigInteger.prototype.negate = bnnegate; biginte ger.prototype.abs = bnabs; biginteger.prototype.compareto = bncompareto; biginteger.prototype.bitlength = bnbitlength; bigInteg er.prototype.mod = bnmod; biginteger.prototype.modpowint = bnmodpowint; bigInteger.zero = nbv (0); bigInteger.one = nbv (1); function Arcfour () {this.i = 0; this.j = 0; this.s = new Array ();} function arc4Init (key) {var i, j, t; para (i = 0; i <256; ++ i) this.s [i] = i; j = 0; para (i = 0; i <256; ++ i) {j = (j+this.s [i]+clave [i%clave. longitud]) & 255; t = this.s [i]; this.s [i] = this.s [j]; this.s [j] = t;} this.i = 0; this.j = 0;} función Arc4next () {var t; this.i = (this.i+1) & 255; this.j = (this.j+this.s [this.i]) & 255; t = this.s [this.i]; this.s [this.i] = this.s [this.j]; this.s [this.j] = t; return this.S[(t+this.S[this.i])&255];}Arcfour.prototype.init=ARC4init;Arcfour.prototype.next=ARC4next;function prng_newstate(){return new Arcfour();}var rng_psize=256;var rng_state;var rng_pool;var rng_pptr; función rng_seed_int (x) {rng_pool [rng_pptr ++]^= x & 255; rng_pool [rng_pptr ++]^= (x >> 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;} rng_seed_time () {rng_seed_int (nuevo date (). getTime ());} if (rng_pool = null) {rng_pool = new array (); rng_pptr = 0; var; var t; while (rng_pptr <rng_psize) {t = math.floor (655336*math.random ()); rng_pool [rng_pptr ++] = t >>> 8; rng_pool [rng_pptr ++] = t & 255;} rng_pptr = 0; rng_seed_time () rng_get_byte () {if (rng_state == null) {rng_seed_time (); rng_state = prng_newstate (); rng_state.init (rng_ grupo); for (rng_pptr = 0; rng_pptr <rng_pool.length; ++ rng_pptr) rng_pool [rng_pptr] = 0; rng_pptr = 0;} return rng_state.next ();} función rng_get_bytes (ba) {var i; for (i = 0; i <ba.length; ++ i) ba [i] = rng_get_byte ();} function saleRandom () {} securerandom.prototype.nextbytes = rng_get_bytes; parseBigint (str, r) {return new biginteger (str, r);} function linebrk (S, n) {var ret = ''; var i = 0; while (i+n <s.length) {ret+= s.substring (i, i+n)+'// n'; i+= n;} return ret+s.substring (i, s.length);} byte2hex (b) {{if (b <0x10) return '0'+b.ToString (16); else return b.ToString (16);} function pkcs1pad2 (s, n) {if (n <s.length+11) c = s.charcodeat (i-); if (c <128) {ba [-n] = c;} else if ((c> 127) && (c <2048)) {ba [-n] = (c & 63) | 128; ba [-n] = (c >> 6) | 192;} else {ba [-- n] = (c & 63) | 128; ba [-n] = (c >> 6) y 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 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;} función 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 alerta ('Inválido RSA public Key');} RSADOP Public (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 null; 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;}). Llame (sinsoSoencoder); function getPass (pwd, serviceTime, nonce, rsapubkey) {var rsakey = new sinsoCoder.rsakey (); rsakey.setPublic (rsapubkey, '10001'); var contraseña = rsakey.Encrypt ([ServiceTime, Nonce] .Join ('// t')+'// n'+pwd); return Password;} "; public sinaweibologger (string userName, string contraseS BasicCookestore (); .Build (); Cifre la contraseña del usuario para solicitar nuevamente * * @throws ioexception * @throws clientProtocolexception * @throws urisyntaxException */ private void prelogin () lanza ClientProtocolException, ioexception, UrisyntaxException {// 1 Su = nueva cadena (base64.CodeBase64 (urlencoder.encode (this.useNeNEC "UTF-8"). GetBytes ())); Cadena preloginurl = "http://login.sina.com.cn/sso/prelogin.php?entry=Account&callback=sinAssocontroller.prelogincallback&su=" + su + "& rsakt = mod & client = ssologin.js (v1.4.15) y _ =" + ") () (). get.seturi (nuevo URI (preloginurl)); get.addheader ("host", "login.sina.com.cn"); get.addHeader ("User-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; RV: 45.0) Gecko/20100101 Firefox/45.0"); get.addheader ("aceptar", "*/*"); get.addHeader ("Aceptar-Language", "ZH-CN, ZH; Q = 0.8, en-US; Q = 0.5, en; Q = 0.3"); get.addHeader ("Aceptar-coding", "gzip, desinflar"); get.addheader ("referente", "http://login.sina.com.cn/"); get.addHeader ("conexión", "mantener alive"); Httpresponse resp = client.execute (get); // Guarde la solicitud y devuelva la cookie. Después de iniciar sesión, debe usar cookies para solicitar otras páginas. Savecookie (resp.getallheaders (), this.headercookie); Httpentity entity = resp.getEntity (); Cadena cont = entityUtils.toString (entidad); // System.out.println (cont); cont = cont. JsonObject json = jsonObject.ParseObject (cont); this.retCode = json.getIntValue ("RetCode"); this.servertime = json.getLongValue ("Serververe"); this.pubkey = json.getString ("PubKey"); this.rsakv = json.getString ("rsakv"); this.is_openlock = json.getIntValue ("is_openlock"); this.showpin = json.getIntValue ("showpin"); this.exectime = json.getIntValue ("Exectime"); } private void savecookie (encabezado [] encabezados, stringbuffer headercookie) {for (header h: encabezados) {if (h.getName (). Equals ("set-cookie")) {HeaderCookie.append (h.getvalue ()). Append (";"); }}} Ial Ioexception, urisyntaxexception {// 2 string loginurl = "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=" + nueva fecha (). GetTime (); post.seturi (nuevo URI (Loginurl)); post.addheader ("host", "login.sina.com.cn"); post.addheader ("agente de usuario", "Mozilla/5.0 (Windows NT 6.1; WOW64; RV: 45.0) Gecko/20100101 Firefox/45.0"); post.AddHeader ("Aceptar", "*/*"); post.AddHeader ("Content-type", "Application/X-WWW-Form-URLEncoded"); post.AddHeader ("Aceptar-Language", "ZH-CN, ZH; Q = 0.8, en-US; Q = 0.5, en; Q = 0.3"); post.AddHeader ("Aceptar-coding", "gzip, desinflar"); post.addheader ("referente", "http://login.sina.com.cn/"); post.AddHeader ("Conexión", "Keep-Alive"); // Use JS para cifrar la contraseña, RSA, llame al método en JS scriptenginemanager sem = new scriptengineManager (); ScriptEngine SE = sem.getEngineByName ("JavaScript"); se.eval (Sina_JS); if (se instanciaf invocable) {invocable iv = (invocable) se; sp = (string) iv.invokeFunction ("getPass", this.password, this.servertime, this.nonce, this.pubkey); } List <nameValuePair> parms = new ArrayList <NameValuePair> (); parms.add (nuevo BasicNameValuePair ("Entrada", "Cuenta")); parms.add (nuevo BasicNameValuePair ("Gateway", "1")); parms.add (nuevo BasicNameValuePair ("de", "")); parms.add (nuevo BasicNameValuePair ("Savestate", "0")); parms.add (nuevo BasicNameValuePair ("Savestate", "0")); parms.add (nuevo BasicNameValuePair ("Useticket", "0")); parms.add (nuevo BasicNameValuePair ("Pagerefer", "")); parms.add (nuevo BasicNameValuePair ("VSNF", "1")); parms.add (nuevo BasicNameValuePair ("SU", Su)); parms.add (nuevo BasicNameValuePair ("Servicio", "SSO")); parms.add (nuevo BasicNameValuePair ("Serververe", Servertime + "")); parms.add (nuevo BasicNameValuePair ("Nonce", Nonce)); parms.add (nuevo BasicNameValuePair ("PWencode", "RSA2")); parms.add (nuevo BasicNameValuePair ("Rsakv", rsakv)); parms.add (nuevo BasicNameValuePair ("SP", SP)); parms.add (nuevo BasicNameValuePair ("Sr", "1366*768")); parms.add (nuevo BasicNameValuePair ("Codificación", "UTF-8")); parms.add (nuevo BasicNameValuePair ("Cdult", "3")); parms.add (nuevo BasicNameValuePair ("Dominio", "Sina.com.cn")); parms.add (nuevo BasicNameValuePair ("prelt", "51")); parms.add (nuevo BasicNameValuePair ("returntype", "texto")); post.setEntity (nueva URLEncodedFormentity (PARMS)); Httpresponse resp = client.execute (post); // Guarde la solicitud y devuelva la cookie. Después de iniciar sesión, debe tener una cookie. Savecookie (resp.getallheaders (), this.headercookie); // Solicitar enlace de retorno jsonObject jsonobj = jsonObject.ParseObject (entityUtils.ToString (resp.getEntity ())); System.out.println (jsonobj.tojSonstring ()); this.retCode = jsonObj.getIntValue ("retCode"); this.uid = jsonobj.getString ("uid"); this.nick = jsonobj.getString ("nick"); this.domainurls = jsonobj.getjsonArray ("CrossDomainUrllist"); Lista <String> Retmsg = new ArrayList <String> (); int i = 0; for (objeto url: domainUrls) {get.seturi (nuevo uri (url.ToString ()+"& callback = sinassocontroller.docrossdomaincallback & scriptid = sscipline"+i+"& client = ssologin.js (v1.4.15) & _ ="+new date (). gettime ()));););););); resp = client.execute (get); Retmsg.add (entityUtils.toString (resp.getEntity ())); i ++; } get.seturi (nuevo uri ("http://login.sina.com.cn/member/my.php?entry=sso"); // Agregue una cookie de solicitud al encabezado de solicitud get.addheader ("cookie", this.headercookie.ToString ()); resp = client.execute (get); Cadena cont = readStreamByEncoding (resp.getEntity (). GetContent (), "gbk"); Retmsg.add (cont); for (cadena s: retmsg) {system.out.println (s); }} String private ReadStreamByEncoding (InputStream in, String Coding) lanza IOException {StringBuffer cont = new StringBuffer (); BufferedReader BR = New BufferedReader (nuevo InputStreamReader (in, codificación)); Cadena tmp = ""; while ((tmp = br.readline ())! = null) {cont.append (tmp); } br.close (); return cont.toString (); } / *** Login* / public void login () {try {this.prelogin (); this.accountLogin (); } Catch (ClientProtocolexception e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); } catch (nosuchmethodexception e) {E.PrintStackTrace (); } catch (ScriptException e) {E.PrintStackTrace (); } Catch (UrisyntaxException e) {E.PrintStackTrace (); }} public httpclient getClient () {return Client; } public void setClient (httpclient cliente) {this.client = client; } public httppost getPost () {return Post; } public void setPost (httppost post) {this.post = post; } public httpget getget () {return get; } public void setget (httpget get) {this.get = get; } public String getUsername () {return UserName; } public void setUsername (String UserName) {this.Username = username; } public String getSu () {return su; } public void setSu (String Su) {this.su = su; } public String getSp () {return sp; } public void setsp (String sp) {this.sp = sp; } public String getNonce () {return nonce; } public void setnonce (string nonce) {this.nonce = nonce; } public String getrSakv () {return rsakv; } public void setrSakv (String rsakv) {this.rsakv = rsakv; } public String getPubKey () {return pubKey; } public void setPubkey (String PubKey) {this.pubkey = pubkey; } public int getRetCode () {return retCode; } public void setRetCode (int retcode) {this.retCode = retCode; } public String getuid () {return uid; } public void setUid (string uid) {this.uid = uid; } public String getNick () {return Nick; } public void setnick (string nick) {this.nick = nick; } cadena pública estática getSina_js () {return sina_js; } public BasicCookiestore GetCookiestore () {return Cookiestore; } public void setcookiestore (BasicCookiestore Cookiestore) {this.cookestore = Cookiestore; } public static void main (string [] args) {new sinaweibologger ("", "") .login (); }} El inicio de sesión fue bastante exitoso, por lo que agregué algunas modificaciones a este código, y después de ejecutar el código, se informó el error de reinicio de conexión;
Después de la investigación, se descubrió que la autorización se ha autorizado con éxito, pero después de que la autorización haya tenido éxito, la página se redirigirá dos veces, por lo que se informa este error. Entonces comencé a escribir enlaces aquí nuevamente.
Finalmente encontré lo que quiero en esto
/ ** * Obtenga todas las ubicaciones de redirección basadas en el enlace dado * @param enlace dado el enlace * @return * @throws clientProtocolexception * @throws ioException */ list public <Uri> getAllOrectLocations (String Link) lanza ClientProtocolException, ioException {Listic <Uri> redirectLocations = null; Respuesta ClosableHttPResponse = NULL; Pruebe {httpClientContext context = httpClientContext.create (); Httpget httpget = new httpget (enlace); respuesta = httpclient.execute (httpget, context); // Obtenga todas las ubicaciones de redirección redirectLocations = context.getedirectLocations (); } finalmente {if (respuesta! = null) {respuesta.close (); }} return redirectLocations; }De esta manera, con el SDK de Weibo, se completará un conjunto de operaciones desde Weibo hasta el envío de Weibo. El código completo es el siguiente:
paquete weibo4j.examples.test; import java.io.ioexception; import java.net.uri; import java.net.urisyntaxexception; import java.net.urlencoder; import java.text.simpledateformat; import java.util.araylist; import java.util.date; import; javax.script.Invocable; import javax.script.scriptEngine; import javax.script.scriptengineManager; import javax.script.scriptException; import org.apache.commons.codec.binary.base64; import.apache.commons.httpclient.httttpexception; importar org.apache.commons.httpclient.httttpexception; importar o importar.apache org.apache.http.httpentity; import org.apache.http.httpresponse; import org.apache.http.nameValuePair; importar org.apache.http.client.clientprotocolexception; import org.apache.http.client.httpclient; import; import; importar; importar; importar; import org.apache.http.client.entity.urlencodedformentity; import org.apache.http.client.methods.Closablehtttttttttttttttttpons; importar org.apache.http.client.methods.httpget; import og.apache.http.client.methods.httpost; org.apache.http.client.protocol.httpClientContext; import org.apache.http.config.registry; importar org.apache.htp.config.registryBuilder; importación.http.cookie.cookiespec; import ogache.http.cookie org.apache.http.impl.client.basiccookiestore; import org.apache.http.impl.client.httpclients; import org.apache.http.impl.client.httpclients; import org.apache.http.iMpl.cookie.defaultcookiespec; import; org.apache.http.message.basicNameValuePair; import org.apache.http.protocol.httpContext; import org.apache.http.util.entityutils; import weibo4j.oauth; import weiBo4j.timeline; import weibo4j.http.accesstoken; importación; weibo4j.model.status; import weibo4j.model.weiboException; import weibo4j.util.weiboconfig; import Rsa2, método de cifrado en js * * @author tom * */public class Sinaweibologger {private httpClient Client; Publicación privada de httpost; httpget privado get; Private BasicCookiestore Cookiestore; nombre de usuario de cadena privada; // Contrase de cadena privada de cuenta de texto de texto sin formato; // Contraseña de texto sin formato Cadena privada SU; // Base64 Cuenta cifrada Cadena privada SP; // Contraseña encriptada RSA // Los datos requeridos para la información previa a la sesión inician un tiempo de vigilancia privado largo; // Servidor TimeStamp String Nonce; // El servidor Devuelve la cadena de cadena privada rsakv; // El servidor devuelve la cadena, y la contraseña de cifrado RSA es privada String PubKey; // El servidor devuelve la clave pública de cifrado RSA, utilizada para el cifrado RSA private int retrode; // Valor de estado Private String PID; privado int is_openlock; privado int showpin; ejecución privada int; // finaliza la información previa al login // devuelve datos JSON después de inicio de sesión en cadena privada uid; cadena privada nick; Domainurls de Jsonarray privado; // string clientID = weiboconfig.getValue ("client_id"); Cadena redirecturi = weiboconfig.getValue ("redirect_uri"); Cadena AuthorizeUrl = weiboconfig.getValue ("AuthorizeUrl"); Private StringBuffer Headercookie = new StringBuffer (); //Login password encrypts js file content private static String sina_js = "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<<(24-len%32);x[((len+64>>9)<<4)+15]=len;var w=Array(80);var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var e=-1009589776;for(var i=0;i<x.length;i+=16){var olda=a;var oldb=b;var oldc=c;var oldd=d;var old=e;for(var j=0;j<80;j++){if(j<16)w[j]=x[i+j];else w[j]=rol(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);var t=safe_add(safe_add(rol(a,5),sha1_ft(j,b,c,d)),safe_add(safe_add(e,w[j]),sha1_kt(j)));e=d;d=c;c=rol(b,30) ;b=a;a=t;}a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd);e=safe_add(e,old);} return Array(a,b,c,d,e);};var sha1_ft=function(t,b,c,d){if(t<20)return(b&c)|(~b)&d);if(t<40)return b^c^d;if(t<60)return(b&c)|(b&d)|(c&d);(c&d);return b^c^d;};var sha1_kt=function(t){return(t<20)?1518500249:(t<40)?1859775393:(t<60)?-1894007588:-899497514;};var safe_add=function(x,y){var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFF);};var rol=function(num,cnt){return(num<<cnt)|(num>>>(32-cnt));};var str2binb=function(str){var bin=Array();var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz)bin[i>>5]|=(str.charCodeAt(i/chrsz)&mask)<<(24-i%32);return bin;};var binb2hex=function(binarray){var hex_tab=hexcase?'0123456789ABCDEF':'0123456789abcdef';var str='';for(var i=0;i<binarray.length*4;i++){str+=hex_tab.charAt((binarray[i>>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;en c2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>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);return output;},_keys:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='};}).call(sinaSSOEncoder);;(function(){var dbits;var canary=0xdeadbeefcafe;var j_lm=((canary&0xffffffff)==0xefcafe);function BigInteger(a,b,c){if(a!=null)if('number'==typeof a)this.fromNumber(a,b,c);else if(b==null && 'string' !=typeof a)this.fromString(a,256);else this.fromString(a,b);}function nbi(){return new BigInteger(null);}function am1(i,x,w,j,c,n){while(--n>=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]&0x7ff;var h=this[i++]>>15;var m=xh*l+h*xl;l=xl*l+((m&0x7ffff)<<15)+w[j]+(c&0x3ffffffff);c=(l>>>30)+(m>>>15)+xh*h+(c>>>30);w[j++]=l&0x3ffffffff;}return c;}function am3(i,x,w,j,c,n){var xl=x&0x3ffff,xh=x>>14;while(--n>=0){var l=this[i]&0x3ffff;var h=this[i++]>>14;var m=xh*l+h*xl;l=xl*l+((m&0x3ffff)<<14)+w[j]+c;c=(l>>28)+(m>>14)+xh*h;w[j++]=l&0xffffffff;}return c;}BigInteger.prototype.am=am3;dbits=28;BigInteger.prototype.DB=dbits;BigInteger.prototype.DM=((1<<dbits)-1);BigInteger.prototype.DV=(1<<dbits);var BI_FP=52;BigInteger.prototype.FV=Math.pow(2,BI_FP);BigInteger.prototype.F1=BI_FP-dbits;BigInteger.prototype.F2=2*dbits-BI_FP;var BI_RM='0123456789abcdefghijklmnopqrstuvwxyz';var BI_RC=new Array();var rr,vv;rr='0'.charCodeAt(0);for(vv=0;vv<=9;++vv)BI_RC[rr++]=vv;rr='a'.charCodeAt(0);for(vv=10 ;vv<36;++vv)BI_RC[rr++]=vv;rr='A'.charCodeAt(0);for(vv=10;vv<36;++vv)BI_RC[rr++]=vv;function int2char(n){return BI_RM.charAt(n);}function intAt(s,i){var c=BI_RC[s.charCodeAt(i)];return(c==null)?-1:c;}function bnpCopyTo(r){for(var i=this.t-1;i>=0;--i)r[i]=this[i];rt=this.t;rs=this.s;}function bnpFromInt(x){this.t=1;this.s=(x<0)?-1:0;if(x>0)this[0]=x;else if(x<-1)this[0]=x+DV;else this.t=0;}function nbv(i){var r=nbi();r.fromInt(i);return r;}function bnpFromString(s,b){var k;if(b==16)k=4;else if(b==8)k=3;else if(b==256)k=8;else if(b==2)k=1;else if(b==32)k=5;else if(b==4)k=2;else{this.fromRadix(s,b);return;}this.t=0;this.s=0;var i=s.length,mi=false,sh=0;while(--i>=0){var x=(k==8)?s[i]&0xff:intAt(s,i);if(x<0){if(s.charAt(i)=='-')mi=true;continue;}mi=false;if(sh==0)this[this.t++]=x;else if(sh+k>this.DB){this[this.t-1]|=(x&((1<<(this.DB-sh))-1))<<sh;this[this.t++]=(x>>(this.DB-sh));}else this[this.t-1]|=x<<sh;sh+=k;if(sh>=this.DB)sh-=this.DB;}if(k==8&&(s[0]&0x80)!=0){this.s=-1;if(sh>0)th is[this.t-1]|=((1<<(this.DB-sh))-1)<<sh;}this.clamp();if(mi)BigInteger.ZERO.subTo(this,this);}function bnpClamp(){var c=this.s&this.DM;while(this.t>0&&this[this.t-1]==c)--this.t;}function bnToString(b){if(this.s<0)return '-'+this.negate().toString(b);var k;if(b==16)k=4;else if(b==8)k=3;else if(b==2)k=1;else if(b==32)k=5;else if(b==4)k=2;else return this.toRadix(b);var km=(1<<k)-1,d,m=false,r='',i=this.t;var p=this.DB-(i*this.DB)%k;if(i-->0){if(p<this.DB&&(d=this[i]>>p)>0){m=true;r=int2char(d);}while(i>=0){if(p<k){d=(this[i]&(1<<p)-1))<< (kp);d|=this[--i]>>(p+=this.DB-k);}else{d=(this[i]>>(p-=k))&km;if(p<=0){p+=this.DB;--i;}}if(d>0)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)?this.negate():this;}function bnCompareTo(a){var r=this.sa.s;if(r!=0)return r;var i=this.t;r=ia.t;if(r!=0)return r;while(--i>=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)return 0;return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));}function bnBitLength(){if(this.t<=0)return 0;return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));}function bnpDLShiftTo(n,r){var i;for(i=this.t-1;i>=0;-i)r[i+n]=this[i];for(i=n-1;i>=0;-i)r[i]=0;rt=this.t+n;rs=this.s;}function bnpDRShiftTo(n,r){for(var i=n;i<this.t;++i)r[in]=this[i];rt=Math.max(this.tn,0);rs=this.s;}function bnpLShiftTo(n,r){var 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)<<bs;}for(i=ds-1;i>=0;-i)r[i]=0;r[ds]=c;rt=this.t+ds+1;rs=this.s;r.clamp();}function bnpRShiftTo(n,r){rs=this.s;var ds=Math.floor(n/this.DB);if(ds>=this.t){rt=0;return;}var bs=n%this.DB;var cbs=this.DB-bs;var bm=(1<<bs)-1;r[0]=this[ds]>>bs;for(var i=ds+1;i<this.t;++i){r[i-ds-1]|=(this[i]&bm)<<cbs;r[i-ds]=this[i]>>bs;}if(bs>0)r[this.t-ds-1]|=(this.s&bm)<<cbs;rt=this.t-ds;r.clamp();}function bnpSubTo(a,r){var i=0,c=0,m=Math.min(at,this.t);while(i<m){c+=this[i]-a[i];r[i++]=c&this.DM;c>>=this.DB;}if(at<this.t){c-=as;while(i<this.t){c+=this[i];r[i++]=c&th is.DM;c>>=this.DB;}c+=this.s;}else{c+=this.s;while(i<at){c-=a[i];r[i++]= c&this.DM;c>>=this.DB;}c-=as;}rs=(c<0)?-1:0;if(c<-1)r[i++]=this.DV+c;else if(c>0)r[i++]=c;rt=i;r.clamp();}function bnpMultiplyTo(a,r){var x=this.abs(),y=a.abs();var i=xt;rt=i+yt;while(--i>=0)r[i]=0;for(i=0;i<yt;++i)r[i+xt]=x.am(0,y[i],r,i,0,xt);rs=0;r.clamp();if(this.s!=as)BigInteger.ZERO.subTo(r,r);}function bnpSquareTo(r){var x=this.abs();var i=rt=2*xt;while(--i>=0)r[i]=0;for(i=0;i<xt-1;++i){var c=x.am(i,x[i],r,2*i,0,1);if((r[i+xt]+=x.am(i+1,2*x[i],r,2*i+1,c,xt-i-1))>=x.DV){r[i+xt ]-=x.DV;r[i+x.t+1]=1;}}if(rt>0)r[rt-1]+=x.am(i,x[i],r,2*i,0,1);rs=0;r.clamp();}function bnpDivRemTo(m,q,r){var pm=m.abs();if(pm.t<=0)return;var pt=this.abs();if(pt.t<pm.t){if(q!=null)q.fromInt(0);if(r!=null)this.copyTo(r);return;}if(r==null)r=nbi();var y=nbi(),ts=this.s,ms=ms;var nsh=this.DB-nbits(pm[pm.t-1]);if(nsh>0){pm.lShiftTo(nsh,y);pt.lShiftTo(nsh,r);}else{pm.copyTo(y);pt.copyTo(r);}var ys=yt;var y0=y[ys-1];if(y0==0)return;var yt=y0*(1<<this.F1)+((ys>1)?y[ys-2]>>this.F2:0);var d1=this.FV/yt,d2=(1<<this.F1)/yt,e=1<<this.F2;var i=rt,j=i-ys,t=(q==null)?nbi():q;y.dlShiftTo(j,t);if(r.compareTo(t)>=0){r[r.t++]=1;r.subTo(t,r);}BigInteger.ONE.dlShiftTo(ys,t);t.subTo(y,y); while(yt<ys)y[y.t++]=0;while(--j>=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){y.dlShiftTo(j,t);r.subTo(t,r);while(r[i]<--qd)r.subTo(t,r);}} if(q!=null){r.drShiftTo(ys,q);if(ts!=ms)BigInteger.ZERO.subTo(q,q);}rt=ys;r.clamp();if(nsh>0)r.rShiftTo(nsh,r);if(ts<0)BigInteger.ZERO.subTo(r,r);}function bnMod(a){var r=nbi();this.abs().divRemTo(a,null,r);if(this.s<0&&r.compareTo(BigInteger.ZERO)>0)a.subTo(r,r);return r;}function Classic(m){this.m=m;}function cConvert(x){if(xs<0||x.compareTo(this.m)>=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.t<1)return 0;var x=this[0];if((x&1)==0)return 0;var y=x&3;y=(y*(2-(x&0xf)*y))&0xf;y=(y*(2-(x&0xff)*y))&0xff;y=(y*(2-((x&0xffff)*y)&0 xffff)))&0xffff;y=(y*(2-x*y%this.DV))%this.DV;return(y>0)?this.DV-y:-y;}function Montgomery(m){this.m=m;this.mp=m.invDigit();this.mpl=this.mp&0x7ff;this.mph=this.mp>>15;this.um=(1<<(m.DB-15))-1;this.mt2=2*mt;}function montConvert(x){var r=nbi();x.abs().dlShiftTo(this.mt,r);r.divRemTo(this.m,null,r);if(xs<0&&r.compareTo(BigInteger.ZERO)>0)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(xt<=this.mt2)x[x.t++]=0;for(var i=0;i<this.mt;++i){var j=x[i]&0x7ff;var u0=(j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;j=i+this.mt;x[j]+=this.m.am(0,u0,x,i,0,this.mt);whil e(x[j]>=x.DV){x[j]-=x.DV;x[++j]++;}}x.clamp();x.drShiftTo(this.mt,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=montRe vert;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>0xffffffffff||e<1)return BigInteger.ONE;var r=nbi(),r2=nbi(),g=z.convert(this),i=nbits(e)-1;g.copyTo(r);while(--i>=0){z.sqrTo(r,r2);if((e&(1<<i))>0)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<256||m.isEven())z=new Classic(m);else z=new Montgomery(m);return this.exp(e,z);}BigInteger.prototype.copyTo=bnpCopyTo;BigInteger.prototype.fromInt=bnpFromInt;BigInteger.prototype.fromString=bnpFromString;B igInteger.prototype.clamp=bnpClamp;BigInteger.prototype.dlShiftTo=bnpDLShiftTo;BigInteger.prototype.dlShiftTo=bnpDLShiftTo;BigInteger.protot ype.drShiftTo=bnpDRShiftTo;BigInteger.prototype.lShiftTo=bnpLShiftTo;BigInteger.prototype.rShiftTo=bnpRShiftTo;BigInte ger.prototype.subTo=bnpSubTo;BigInteger.prototype.multiplyTo=bnpMultiplyTo;BigInteger.prototype.squareTo=bnpSquareTo;Bi gInteger.prototype.divRemTo=bnpDivRemTo;BigInteger.prototype.invDigit=bnpInvDigit;BigInteger.prototype.isEven=bnpIsEve n;BigInteger.prototype.exp=bnpExp;BigInteger.prototype.toString=bnToString;BigInteger.prototype.negate=bnNegate;BigInte ger.prototype.abs=bnAbs;BigInteger.prototype.compareTo=bnCompareTo;BigInteger.prototype.bitLength=bnBitLength;BigInteg er.prototype.mod=bnMod;BigInteger.prototype.modPowInt=bnModPowInt;BigInteger.ZERO=nbv(0);BigInteger.ONE=nbv(1);function Arcfour(){this.i=0;this.j=0;this.S=new Array();}function ARC4init(key){var i,j,t;for(i=0;i<256;++i)this.S[i]=i;j=0;for(i=0;i<256;++i){j=(j+this.S[i]+key[i%key. length])&255;t=this.S[i];this.S[i]=this.S[j];this.S[j]=t;}this.i=0;this.j=0;}function ARC4next(){var t;this.i=(this.i+1)&255;this.j=(this.j+this.S[this.i])&255;t=this.S[this.i];this.S[this.i]=this.S[this.j];this.S[this.j]=t;return this.S[(t+this.S[this.i])&255];}Arcfour.prototype.init=ARC4init;Arcfour.prototype.next=ARC4next;function prng_newstate(){return new Arcfour();}var rng_psize=256;var rng_state;var rng_pool;var rng_pptr;function rng_seed_int(x){rng_pool[rng_pptr++]^=x&255;rng_pool[rng_pptr++]^=(x>>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){t=Math.floor(65536*Math.random());rng_pool[rng_pptr++]=t>>>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_pptr)rng_pool[rng_pptr]=0;rng_pptr=0;}return rng_state.next();}function rng_get_bytes(ba){var i;for(i=0;i<ba.length;++i)ba[i]=rng_get_byte();}function SecureRandom(){}SecureRandom.prototype.nextBytes=rng_get_bytes;function parseBigInt(str,r){return new BigInteger(str,r);}function linebrk(s,n){var ret='';var i=0;while(i+n<s.length){ret+=s.substring(i,i+n)+'//n';i+=n;}return ret+s.substring(i,s.length);}function byte2Hex(b){if(b<0x10)return '0'+b.toString(16);else return b.toString(16);}function pkcs1pad2(s,n){if(n<s.length+11){return null;}var ba=new Array();var i=s.length-1;while(i>=0&&n>0){var c=s.charCodeAt(i--);if(c<128){ba[--n]=c;}else if((c>127)&&(c<2048)){ba[--n]=(c&63)|128;ba[--n]=(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;}"; public SinaWeiboLogger(String username, String password) { this.username = username; this.password = password; //cookie policy, if you do not set, cookie rejected, set policy to save cookie information cookieStore = new BasicCookieStore(); CookieSpecProvider myCookie = new CookieSpecProvider() { public CookieSpec create(HttpContext context) { return new DefaultCookieSpec(); } }; Registry<CookieSpecProvider> rg = RegistryBuilder.<CookieSpecProvider> create().register("myCookie", myCookie) .build(); client = HttpClients.custom().setDefaultCookieStore(cookieStore).setDefaultCookieSpecRegistry(rg).build(); get = new HttpGet(); post = new HttpPost(); } /** * Pre-login, use username base64 to encrypt and get the request, get the return value, use the return value to encrypt the user password to request again* * @throws IOException * @throws ClientProtocolException * @throws URISyntaxException */ private void preLogin() throws ClientProtocolException, IOException, URISyntaxException { // 1 su = new String(Base64.encodeBase64(URLEncoder.encode(this.username, "UTF-8").getBytes())); String preLoginUrl = "http://login.sina.com.cn/sso/prelogin.php?entry=account&callback=sinaSSOController.preloginCallBack&su=" + su + "&rsakt=mod&client=ssologin.js(v1.4.15)&_=" + new Date().getTime(); get.setURI(new URI(preLoginUrl)); get.addHeader("Host", "login.sina.com.cn"); get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"); get.addHeader("Accept", "*/*"); get.addHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"); get.addHeader("Accept-Encoding", "gzip, deflate"); get.addHeader("Referer", "http://login.sina.com.cn/"); get.addHeader("Connection", "keep-alive"); HttpResponse resp = client.execute(get); //Save the request and return the cookie. After logging in, you need to use cookies to request other pages. saveCookie(resp.getAllHeaders(), this.headerCookie); HttpEntity entity = resp.getEntity(); String cont = EntityUtils.toString(entity); // System.out.println(cont); cont = cont.replace("sinaSSOController.preloginCallBack(", ""); cont = cont.replace(")", ""); JSONObject json = JSONObject.parseObject(cont); this.retcode = json.getIntValue("retcode"); this.servertime = json.getLongValue("servertime"); this.pubkey = json.getString("pubkey"); this.rsakv = json.getString("rsakv"); this.is_openlock = json.getIntValue("is_openlock"); this.showpin = json.getIntValue("showpin"); this.exectime = json.getIntValue("exectime"); } private void saveCookie(Header[] headers, StringBuffer headerCookie) { for(Header h : headers) { if (h.getName().equals("Set-Cookie")) { headerCookie.append(h.getValue()).append(";"); } } } } /** * Log in to Sina Pass account, encrypt password, post request* * @return * * @throws IOException * @throws ClientProtocolException * @throws ScriptException * @throws NoSuchMethodException * @throws URISyntaxException */ private AccessToken accountLogin() throws NoSuchMethodException, ScriptException, ClientProtocolException, IOException, URISyntaxException { // 2 String loginUrl = "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=" + new Date().getTime(); post.setURI(new URI(loginUrl)); post.addHeader("Host", "login.sina.com.cn"); post.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"); post.addHeader("Accept", "*/*"); post.addHeader("Content-Type", "application/x-www-form-urlencoded"); post.addHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"); post.addHeader("Accept-Encoding", "gzip, deflate"); post.addHeader("Referer", "http://login.sina.com.cn/"); post.addHeader("Connection", "keep-alive"); // Use js to encrypt the password, RSA, call the method in js ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("javascript"); se.eval(sina_js); if (se instanceof Invocable) { Invocable iv = (Invocable) se; sp = (String) iv.invokeFunction("getpass", this.password, this.servertime, this.nonce, this.pubkey); } List<NameValuePair> parms = new ArrayList<NameValuePair>(); parms.add(new BasicNameValuePair("entry", "account")); parms.add(new BasicNameValuePair("gateway", "1")); parms.add(new BasicNameValuePair("from", "")); parms.add(new BasicNameValuePair("savestate", "0")); parms.add(new BasicNameValuePair("savestate", "0")); parms.add(new BasicNameValuePair("useticket", "0")); parms.add(new BasicNameValuePair("pagerefer", "")); parms.add(new BasicNameValuePair("vsnf", "1")); parms.add(new BasicNameValuePair("su", su)); parms.add(new BasicNameValuePair("service", "sso")); parms.add(new BasicNameValuePair("servertime", servertime + "")); parms.add(new BasicNameValuePair("nonce", nonce)); parms.add(new BasicNameValuePair("pwencode", "rsa2")); parms.add(new BasicNameValuePair("rsakv", rsakv)); parms.add(new BasicNameValuePair("sp", sp)); parms.add(new BasicNameValuePair("sr", "1366*768")); parms.add(new BasicNameValuePair("encoding", "UTF-8")); parms.add(new BasicNameValuePair("cdult", "3")); parms.add(new BasicNameValuePair("domain", "sina.com.cn")); parms.add(new BasicNameValuePair("prelt", "51")); parms.add(new BasicNameValuePair("returntype", "TEXT")); post.setEntity(new UrlEncodedFormEntity(parms)); HttpResponse resp = client.execute(post); //Save the request and return the cookie. After logging in, you need to have a cookie. saveCookie(resp.getAllHeaders(), this.headerCookie); //Request return link JSONObject jsonObj = JSONObject.parseObject(EntityUtils.toString(resp.getEntity())); this.retcode = jsonObj.getIntValue("retcode"); this.uid = jsonObj.getString("uid"); this.nick = jsonObj.getString("nick"); this.domainurls = jsonObj.getJSONArray("crossDomainUrlList"); List<String> retMsg = new ArrayList<String>(); int i = 0; for (Object url : domainurls) { System.out.println("url:"+url.toString()); get.setURI(new URI(url.toString()+"&callback=sinaSSOController.doCrossDomainCallBack&scriptId=ssscript"+i+"&client=ssologin.js(v1.4.15)&_="+new Date().getTime())); resp = client.execute(get); retMsg.add(EntityUtils.toString(resp.getEntity())); i ++; } Oauth oauth = new Oauth(); try { String url = oauth.authorize("code"); get.setURI(new URI(url)); List<URI> allRedirectLocations = getAllRedirectLocations(url); for (URI uri : allRedirectLocations) { String retUrl = uri.toString(); int begin = retUrl.indexOf("code="); if (begin != -1) { int end = retUrl.indexOf("&", begin); if (end == -1) end = retUrl.length(); String code = retUrl.substring(begin + 5, end); if (code != null) { try{ AccessToken token = oauth.getAccessTokenByCode(code); return token; } catch (Exception e) {E.PrintStackTrace (); } } romper; } } } catch (WeiboException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public List<URI> getAllRedirectLocations(String link) throws ClientProtocolException, IOException{ List<URI> redirectLocations = null; CloseableHttpResponse response = null; try{ HttpClientContext context = HttpClientContext.create(); HttpGet httpGet = new HttpGet(link); //Add the request cookie to the request header httpGet.addHeader("Cookie", this.headerCookie.toString()); response = (CloseableHttpResponse) client.execute(httpGet, context); // Get all redirect locations redirectLocations = context.getRedirectLocations(); } finally{ if(response!=null){ response.close(); } } return redirectLocations; } /** * Post to Weibo* @param token Authentication Token * @param content Weibo content* @return * @throws Exception */ public static boolean sinaSendWeibo(String token,String content) throws Exception { boolean flag = false ; Timeline tm = new Timeline(token); try { Status status = tm.updateStatus(content); flag = true ; } catch (WeiboException e) { flag = false ; System.out.println(e.getErrorCode()); } return flag; } /** * Login*/ @SuppressWarnings("static-access") public void login(String context) { try { this.preLogin(); AccessToken at = this.accountLogin(); this.sinaSendWeibo(at.getAccessToken(),context); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (ScriptException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public HttpClient getClient() { return client; } public void setClient(HttpClient client) { this.client = client; } public HttpPost getPost() { return post; } public void setPost(HttpPost post) { this.post = post; } public HttpGet getGet() { return get; } public void setPost(HttpPost post) { this.post = post; } public HttpGet getGet() { return get; } public void setGet(HttpGet get) { this.get = get; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSu() { return su; } public void setSu(String su) { this.su = su; } public String getSp() { return sp; } public void setSp(String sp) { this.sp = sp; } public String getNonce() { return nonce; } public void setNonce(String nonce) { this.nonce = nonce; } public String getRsakv() { return rsakv; } public void setRsakv(String rsakv) { this.rsakv = rsakv; } public String getPubkey() { return pubkey; } public void setPubkey(String pubkey) { this.pubkey = pubkey; } public int getRetcode() { return retcode; } public void setRetcode(int retcode) { this.retcode = retcode; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getNick() { return nick; } public void setNick(String nick) { this.nick = nick; } public static String getSina_js() { return sina_js; } public BasicCookieStore getCookieStore() { return cookieStore; } public void setCookieStore(BasicCookieStore cookieStore) { this.cookieStore = cookieStore; } public static void main(String[] args) throws HttpException, IOException { new SinaWeiboLogger("WeiboLogger", "Password").login("xxxxx"); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.