Tout d'abord, vous avez besoin d'un compte de développeur Weibo. Ce dont nous avons besoin, c'est de la clé d'application, de l'application Secre et Redirect_uri. L'entreprise avait à l'origine cette étape, alors elle l'a sauvée. Il existe de nombreuses recherches sur Baidu.
Ok, commençons maintenant:
J'ai d'abord trouvé ce code en ligne, et j'ai écrit le lien ici
J'étais très heureux de le résoudre à la fois; Mais l'erreur " Rafraîchissement du jeton a échoué ". Après avoir lu le code, j'en ai retourné 200, pas 302, et j'étais un peu confus. Peu importe comment j'ai étudié pourquoi cela s'est produit en premier, j'ai mis l'URL qu'il a généré sur le navigateur et je l'ai lu. J'ai entré la page d'autorisation et je n'ai pas eu besoin de me connecter en premier. Après avoir regardé F12, c'était en effet 200, donc je suppose que c'était parce que je ne me suis pas connecté avec succès, alors j'ai commencé à me connecter sur le backend de Weibo pour trouver un tel code. L'adresse d'origine a été oubliée et l'auteur d'origine est gêné.
package com.spider.httpclient; import java.io.buffereDaDer; import java.io.ioexception; import java.io.inputstream; import java.io.inputstreamreader; import java.net.uri; java.util.date; importer java.util.list; import javax.script.invocable; import javax.script.scriptengine; import javax.script.scriptennemanager; import javax.script.scriptexception; importer org.apache.commons.codec.binary.base64; import org.apache.http. org.apache.http.httpentity; import org.apache.http.httpreson; import org.apache.http.namevaluepair; import org.apache.http.client.httpcllient; import org.apache.http.client.httpclient; import org.apache.http.client.config.cookiespecs; import org.apache.http.client.entity.urlencodedForminalty; import org.apache.http.client.methods.httpget; Import org.apache.http.config.registrybuilder; import org.apache.http.cookie.cookiespec; import org.apache.http.cookie.cookiespecprovider; import org.apache.http.http.IMPL.CL.CLILIET.BASICIE; IMPORT ORG. org.apache.http.impl.client.httpclients; import org.apache.http.impl.cookie.defaultcookiespec; import org.apache.http.impache.http.message.basicnamevaluepair; org.apache.http.protocol.httpcontext; import org.apache.http.util.entityutils; import com.alibaba.fastjson.jsonArray; import com.alibaba.fastjson.jsonobject; / ** * SINA WEIBO Sogin, 7 avril 2016 La méthode de cryptage est dans JS * * @author Tom * * / classe publique SinaweIbologger {Client privé httpClient; Post HTTPPOST privé; Httpget privé Get; Cookstore de base privé BasicCookiestore; Nom d'utilisateur de chaîne privée; // Mot de passe de chaîne privée compte du compte PlainText; // Mot de mot en clair String privé SU; // Base64 Compte crypté String Private SP; // Mot de passe crypté RSA // Les données requises pour les informations pré-login démarrent privé Long SERVERTIME; // Timestamp du serveur String privé nonce; // Server Renvoie la chaîne Private String RSAKV; // Server renvoie la chaîne et le mot de passe de cryptage RSA est privé PUBKEY; // Server renvoie la clé publique RSA Encryption, utilisée pour RSA Encryption private int retcode; // Valeur d'état Private String Pcid; private int is_openlock; private int showpin; EXÉCUTION INTRAGE PRIVATE; // Informations pré-Login Ends // Renvoie des données JSON après la connexion de la chaîne privée UID; String privé Nick; Domainurls JSonArray privé; // private StringBuffer HereCookie = new StringBuffer (); // Connexion mot de passe cryptes js contenu de fichier private statique statique 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); Core_sha1 = fonction (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; d = 271733878; var e = -1009589776; for (var i = 0; i <x.length; i + = 16) {var oldia = 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]; 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 = fonction (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); sha1_kt = fonction (t) {return (t <20)? 1518500249: (t <40)? 1859775393: (t <60)? - 1894007588: -899497514;}; var safe_add = function (x, y) {var lsw = (x & 0xffff) + (y & 0xff); msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xfff);}; var rol = function (num, cnt) {return (num << cnt) | (num >>> (32-cnt));}; 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); 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);} str;}; this.base64 = {Encode: fonction (input) {input = '' + input; if (input == '') return ''; var output = ''; var chr1, chr2, chr3 = ''; var enc1, enc2, enc3, enc4 = ''; var i = 0; do {ch1 = input.charcodeat (i ++); chr2 = input.charcodeat (i ++); ch3 = input.charcodeat (i ++); Enc1 = ch1 >> 2; en C2 = ((chr1 & 3) << 4) | (chr2 >> 4); ENC3 = ((chr2 & 15) << 2) | (ch3 >> 6); ENC4 = ch3 & 63; if (isnan (ch2)) {Enc3 = Enc4 = 64;} else if (isnan (ch3)) {Enc4 = 64;} output = output + this._keys.charat (enc1) + this._keys.charat (enc2) + this._keys.charat (enc3) + this._keys.charat (enc4); ch1 = ch2 = ch3 = ''; Enc1 = enc2 = enc3 = eNc4 = ';'; sortie;}, _ touches: 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 + / ='};}). call (sinassoencoder) ;; (function () {var dbits; vary cariary = 0xdeadbeefcafa j_lm = ((canary & 0xffffffff) == 0XEFCAFE); fonction bigInteger (a, b, c) {if (a! = null) if ('nombre' == typeof a) this.fromnumber (a, b, c); else if (b == null && 'string'! = typeof a) this.fromstring (a, 256); this.fromString (a, b);} fonction 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 (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 & 0x3ffffff); c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30); w [j ++] = l & 0x3ffffffff; 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;} 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); pour (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; fonction int2char (n) {return bi_rm.charat (n);} fonction intat (s, i) {var c = bi_rc [s.Charcodeat (i)]; return (c == null)? - 1: c;} fonction bnpcopyto (r) {for (var i = this.t-1; i> = 0; - i) r [i] = this [i]; rt = this.t; rs = this.s;} fonction bnpfromint (x) {this.t = 1; this.s = (x <0)? - 1: 0; if (x> 0) nbv (i) {var r = nbi (); r.fromint (i); return r;} fonction 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; 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 est [this.t-1] | = ((1 << (this.db-sh)) - 1) << sh;} this.clamp (); if (mi) bigInteger.zero.subto (this, this);} fonction 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; 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);}} m? r: '0';} fonction 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. 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;} fonction bnbitLength () {if (this.t <= 0) return 0; return this.db * (this.t-1) + nbits (this [this.t-1] ^ (this.s & this.dm));} fonction bnbitLength () {if (this.t <= 0) return 0; this.db * (this.t-1) + nbits (this [this.t-1] ^ (this.s & this.dm));} fonction 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;} fonction bnpdrshiftto (n, r) {for (var.s;} i = n; i <this.t; ++ i) r [in] = this [i]; rt = math.max (this.tn, 0); rs = this.s;} fonction 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; for (i = this.t-1; i> = 0; - i) {r [i + ds + 1] = (this [i] >> cbs) | c; c = (this [i] & bm) << bs;} pour (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] i = ds + 1; i <this.t; ++ i) {r [i-dds-1] | = (this [i] & bm) << cbs; r [i-dds] = 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 (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 ();} fonction 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. 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 ();} fonction 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 (); 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; 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; i = rt, j = i-ys, t = (q == null)? nbi (): q; y.dlshiftto (j, t); if (r............... ce.......... ce...... ce 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.dsrShiftTo (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)} fure bnMOD (a)} fure bnMOD (a)} fure bnMOD (a)} fure bnMOD (a)} fure bnMOD (a). r = nbi (); this.abs (). divRemto (a, null, r); if (this.s <0 && r............. ce.subto (r, r); return r;} fonction classic (m) {this.m = m;} function cconvert (x) {if (xs <0 || x.....cogard (this.m)> = 0) x.mod (this.m); else return x;} fonction crevert (x) {return x;} function creduce (x) {x.divremto (this.m, null, x);} fonction cmulto (x, y, r) {x.multiplyto (y, r); this.reduce (r);} fonction function csqrto (x, r) {x.squareto (r); this.reduce (r);} classic.prototype.convert = cConvert; classic.prototype.revert = crevert; classique.prototype.reduce = créduce; 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;} fonction Montconvert (x) {var r = nbi (); x.abs (). dlshiftto (this.mt, r); r.divremto (this.m, null, r); if (xs <0 && r...........combge 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; 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); e (x [j]> = x.dv) {x [j] - = x.dv; x [++ j] ++;}} x.clamp (); x.dsrshiftto (this.mt, x); if (x.compareto (this.m)> = 0) x.subto (this.m, x);} fonction fonction Monttsqrto (x, r) {x.Squareto (r); this.reduce (r);} fonction 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; fonction bnpiseven () {return ((this.t> 0)? (this [0] & 1): this.s) == 0;} fonction 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) t = r; r = r2; r2 = t;}} return z.Revert (r);} fonction bnmodpowint (e, m) {var z; if (e <256 || m.iseven ()) z = new classique (m); else z = new Montgomery (m); this.exp (e, z);} bigInteger.prototype.copyto = bnpcopyto; bigInteger.prototype.fromint = bnpfromint; bigInteger.prototype.fromstring = bnpfromString; b; b iginteger.prototype.clamp = bnpclamp; bigInteger.prototype.dlshiftto = bnpdlshiftto; biginteger.prototype.dlshiftto = bnpdlshiftto; biginteger.protot ype.dsrShiftTo = bnpdsrShiftTo; bigInteger.prototype.lshiftto = bnplshiftto; bigInteger.prototype.rshiftto = bnprshiftto; 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); fonction ArcFour () {this.i = 0; this.j = 0; this.s = new Array ();} fonction 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. longueur]) & 255; t = this.s [i]; this.s [i] = this.s [j]; this.s [j] = t;} this.i = 0; this.j = 0;} fonction 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; rng_pptr; fonction 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_ptr = 0; rng_seed_time (); 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 ();} fonction rng_get_bytes (ba) {var i; for (i = 0; i <ba.length; ++ i) ba [i] = rng_get_byte ();} fonction sécurit parsebigint (str, r) {return new BigInteger (str, r);} fonction 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) {return null;} var ba = new Array (); var i = s.Length-1; while (i> = 0 & n> 0) 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; retour new BigInteger (Ba);} fonction 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 clés publique');} fonction Rsadopublic (x) {retour x.modpowint (this.e, this.n);} fonction rsaencrypt (text) {var m = pkcs1pad2 (texte, (this.n.bitlength () + 7) >> 3); if (m == null) return null; var c = this.dopublic (m); if (c == null) return 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;}). call (sinassoencoder); fonction getpass (pwd, serviceTime, nonce, rsapubkey) {var rsakey = new Sinassoencoder.rSakey (); rsakey.setpublic (rsapubkey, '10001'); mot de passe = rsakey.encrypt ([ServiceTime, nonce] .join ('// t') + '// n' + pwd); retour mot de passe;} "; public Sinaweibologger (String Username, String Motway BasicCoEstore (); .Build (); Client = HttpClients.Custo Crypt le mot de passe de l'utilisateur pour demander à nouveau * * @throws ioException * @throws clientProtoCoLexception * @throws urisyntaxException * / private void prelogin () lève 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 (). get.seturi (New Uri (préloginurl)); get.addheader ("hôte", "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 ("accepter", "* / *"); get.addheader ("Accept-Language", "Zh-Cn, Zh; Q = 0,8, En-US; Q = 0,5, EN; Q = 0,3"); get.addheader ("accepter-codage", "gzip, dégonfler"); get.addheader ("référer", "http://login.sina.com.cn/"); get.Addheader ("Connexion", "Keep-Alive"); HttpResponse resp = client.execute (get); // Enregistrez la demande et retournez le cookie. Après vous être connecté, vous devez utiliser des cookies pour demander d'autres pages. SAVECOOKIE (resp.getallheaders (), this.headerCookie); Httpentity Entity = resp.getEntity (); String cont = entityUtils.tostring (entité); // System.out.println (suite); 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 (en-tête [] en-têtes, stringBuffer HeaterCookie) {pour (en-tête h: en-têtes) {if (h.getName (). }}}} / ** * Connectez-vous au compte Sina Pass, en cryptant le mot de passe, demande de poste * * @return * * @throws ioException * @Throws ClientProtoCoLexception * @throws scriptexception * @throws nosuchmethodexception * @throws urisyntaxException * / private void accountlogin () throws nosuchMethoDexception, Scractexception, Scorcial Accountlogin () throws nosuchMethodException, Scractexception, Scracin, Throws NosuchMethodException, Scractexception, Scran 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 ("hôte", "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 ("accepter", "* / *"); post.addheader ("contenu-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, dégonflage"); poster.addheader ("référer", "http://login.sina.com.cn/"); post.Addheader ("Connexion", "Keep-Alive"); // Utilisez JS pour crypter le mot de passe, RSA, appelez la méthode dans JS ScriptenNineManager 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 ("Entrée", "compte")); 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 ("useTticket", "0")); parms.add (new BasicNameValuepair ("Pagegerefer", "")); 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 ("domaine", "sina.com.cn")); parms.add (new BasicNameValuepair ("Prelt", "51")); parms.add (new BasicNameValuepair ("returnType", "texte")); post.SetEntity (nouveau UrLencodedFormentity (PARMS)); HttpResponse resp = client.execute (post); // Enregistrez la demande et retournez le cookie. Après vous être connecté, vous devez avoir un cookie. SAVECOOKIE (resp.getallheaders (), this.headerCookie); // Request return lien jsonObject JSONOBJ = jsonObject.PaSeObject (entityUtils.toString (resp.getEntity ())); System.out.println (JSONOBJ.TojSontring ()); 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; pour (URL objet: domainurls) {get.seturi (new uri (url.tostring () + "& callback = sinassocontroller.docrossdomaincallback & scriptid = sscipline" + i + "& client = ssologin.js (v1.4.15) & _ =" + new date (). gettime ()); resp = client.Exécute (get); retmsg.add (entityUtils.toString (resp.getEntity ())); i ++; } get.seturi (New Uri ("http://login.sina.com.cn/member/my.php?entry=sso")); // Ajouter un cookie de demande à l'en-tête de demande get.addheader ("cookie", this.henercookie.tostring ()); resp = client.Exécute (get); String cont = readStreAmbyEncoding (resp.getEntity (). GetContent (), "gbk"); retmsg.add (suite); pour (String s: retmsg) {System.out.println (s); }} private String readStreAmbyEncoding (inputStream in, String Encoding) lève ioException {stringBuffer cont = new StringBuffer (); BufferedReader br = new BufferedReader (new inputStreamReader (in, codage)); String 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 client) {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 getU () {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 getTretCode () {return retcode; } public void SetTreTcode (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; } chaîne statique publique getSINA_JS () {return sina_js; } public BasicCooShiestore getcookiestore () {return Cookiestore; } public void setcookiestore (Basiccookiestore Cookiestore) {this.cookiestore = Cookiestore; } public static void main (string [] args) {new Sinaweibologger ("", "") .login (); }} La connexion a été assez réussie, j'ai donc ajouté quelques modifications à ce code, et après avoir exécuté le code, l'erreur de réinitialisation de la connexion a été signalée;
Après des recherches, il a été constaté que l'autorisation a été autorisée avec succès, mais une fois l'autorisation réussie, la page sera redirigé deux fois, donc cette erreur est signalée. J'ai donc recommencé à écrire des liens ici.
Finalement trouvé ce que je veux là-dessus
/ ** * Obtenez tous les emplacements de redirection basés sur le lien donné * @param lien donné * @return * @throws clientProtoCoLexception * @throws ioException * / public list <Uri> getAllRedirectLocations (lien de chaîne) lance ClientProtocolexception, ioException {list <Uri> redirectLocations = Null; CloseableHttpResponse Response = null; Try {httpClientContext context = httpClientContext.create (); Httpget httpget = new httpget (lien); réponse = httpClient.Exécute (httpget, contexte); // Obtenez tous les emplacements de redirection redirectLocations = context.getRedirectLocations (); } enfin {if (réponse! = null) {réponse.close (); }} return redirectLocations; }De cette façon, avec le SDK de Weibo, un ensemble d'opérations de Weibo à l'envoi de Weibo sera achevé. Le code complet est le suivant:
package 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.arraylist; import java.util.date; import java. javax.script.invocable; import javax.script.scriptengine; import javax.script.scriptenMemanager; import javax.script.scriptexception; import org.apache.commons.codec.binary.base64; import org.apache.commons.httpclient.httpexception; import org.apache.http.header; import org.apache.http.httpentity; import org.apache.http.httpreson; import org.apache.http.namevaluepair; import org.apache.http.client.clientprotocoLexect; org.apache.http.client.httpclient; import org.apache.http.client.entity.urlencodedFormentity; import org.apache.http.client.methods.closeablehttpresson; import org.apache.http.client.methods.httponse; org.apache.http.client.methods.httppost; import org.apache.http.client.protocol.httpclientcontext; import org.apache.http.config.registry; import org.apache.http.config.egiedbuilder; import org.apache.http.cookie. org.apache.http.cookie.cookiespecprovider; import 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.util.entityutils; import weibo4j.oaoth; weibo4j.timeline; importer weibo4j.http.accesstoken; import weibo4j.model.status; import weibo4j.model.weiboexception; import weibo4j.util.weiboconfig; import com.alibaba.fastjson.jsonArray; import com.alibaba.fastjontjon.json.jon; Login, 7 avril 2016 08:30:16, la méthode de cryptage de mot de passe adopte RSA2, méthode de chiffrement en js * * @author tom * * / classe publique Sinaweibologger {client privé httpClient; Post HTTPPOST privé; Httpget privé Get; Cookstore de base privé BasicCookiestore; Nom d'utilisateur de chaîne privée; // Mot de passe de chaîne privée compte du compte PlainText; // Mot de mot en clair String privé SU; // Base64 Compte crypté String Private SP; // Mot de passe crypté RSA // Les données requises pour les informations pré-login démarrent privé Long SERVERTIME; // Timestamp du serveur String privé nonce; // Server Renvoie la chaîne Private String RSAKV; // Server renvoie la chaîne et le mot de passe de cryptage RSA est privé PUBKEY; // Server renvoie la clé publique RSA Encryption, utilisée pour RSA Encryption private int retcode; // Valeur d'état Private String Pid; private int is_openlock; private int showpin; EXÉCUTION INTRAGE PRIVATE; // Informations pré-Login Ends // Renvoie des données JSON après la connexion de la chaîne privée UID; String privé Nick; Domainurls JSonArray privé; // string clientId = weiboconfig.getValue ("client_id"); String redirectturi = weiboconfig.getValue ("redirect_uri"); String AuthorizeUrl = weiboconfig.getValue ("AuthorizeUrl"); private StringBuffer HereCookie = 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 (); } } casser; } } } 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"); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.