まず、Weibo開発者アカウントが必要です。必要なのは、Appキー、App secre、redirect_uriです。会社はもともとこのステップを持っていたので、それを保存しました。 Baiduには多くの検索があります。
さて、今から始めましょう:
最初にこのコードをオンラインで見つけて、ここにリンクを書きました
一度に解決できてとてもうれしかったです。しかし、「トークン更新が失敗した」エラー。コードを読んだ後、私は302ではなく200を返しましたが、少し混乱していました。なぜこれが最初に起こったのかをどのように研究しても、彼が生成したURLをブラウザに置いて読みました。承認ページを入力しましたが、最初にログインする必要はありませんでした。 F12を見た後、それは確かに200だったので、それは私が正常にログインしなかったからだと思いますので、そのようなコードを見つけるためにWeiboバックエンドにログインし始めました。元の住所は忘れられており、元の著者は恥ずかしいです。
パッケージ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.urisyntexcection; java.util.arraylist; import java.util.date; import java.util.list; import javax.script.invocable; import javax.script.scriptengine; import javax.script.scriptenginemanager; import javax.script.script.scriptexception; import.commons.commons.coms.codec.binar org.apache.http.header; import org.apache.http.httpentity; Import org.apache.http.httpresponse; Import org.apache.http.namevaluepair; Import org.apache.http.client.clotocolexceptip.cltocolexception; org.apache.http.client.config.cookiespecs; Import org.apache.http.client.entity.urlencodedformentity; Import org.apache.http.client.httpget; Import org.apache.http.methods.htppost; Import; Import; org.apache.http.config.registry; import org.apache.http.config.registrybuilder; Import org.apache.http.cookie.cookiespec; Import org.apache.http.cookie.cookiespecprovider; apache.http.impl.client.httpclients; import org.apache.http.impl.cookie.defaultcookiespec; Import org.apache.http.impl.cookie.defaultcookiespecprovider; import org.apache.http.message.-message.-message.-basicaipeapeapeapeapeapeapeapeapeapeapaip.-Message.-Base. org.apache.http.protocol.httpcontext; import org.apache.http.util.entityutils; Import com.alibaba.fastjson.jsonarray; Import com.alibaba.fastjson.jsonobject;暗号化方法はjs * * @author tom * */public class sinaweibologger {private httpclientクライアント;プライベートhttppost投稿。プライベートhttpget get;プライベートBasicCookiestore Cociteistore;プライベート文字列ユーザー名; // plantextアカウントプライベート文字列パスワード。 // plantextパスワードプライベート文字列su; // base64暗号化されたアカウントプライベート文字列sp; // RSA暗号化されたパスワード//プレロジン情報に必要なデータは、プライベートの長いServertimeを開始します。 //サーバータイムスタンププライベート文字列nonce; //サーバーは文字列プライベート文字列rsakvを返します。 //サーバーは文字列を返し、RSA暗号化パスワードはprivate string pubkeyです。 //サーバーRSA暗号化に使用されるRSA暗号化の公開キーを返します。 //ステータス値プライベート文字列PCID; private int is_openlock; Private int showpin;プライベートINT実行。 //ログイン情報の終了//ログインプライベート文字列UID後にJSONデータを返します。プライベートストリングニック;プライベートJsonArray domainurls; // private stringbuffer headercookie = new StringBuffer(); //パスワードをログインするJSファイルコンテンツプライベート静的文字列sina_js = "var sinassoencoder = sinassoencoder || {};(function(){var hexcase = 0; var chrsz = 8; the.hex_sha1 = function(s){return binb2hex(core_sha1(sr2binb(s); 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 = -27173879; var c = -1732541934 d = 271733878; var e = -1009589776; 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);(c&d);(c&d);(c&d);(c&d);(c&d);(c&d); sha1_kt = function(t){return(t <20)?1518500249:(t <40)?1859775393:(t <60)?-1894007588:-899497513 msw =(x >> 16)+(y >> 16)+(lsw >> 16); return(msw << 16)|(lsw&0xfff);}; var rol = function(num、cnt){return(num << cnt)|(num >>>(32-cnt);}; var bin = array mask =(1 << chrsz)-1; 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);} 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+this._keys.charat(enc2)+this._keys.charat(enc3)+this._keys.charat(enc4); chr1 = chr2 = chr3 = ''; enc1 = enc3 = enc3 = ems3 = '' '' '' '' '' '' '' '' '' '' '' output;}、_ keys: 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/='};};}) j_lm =((canary&0xffffffff)== 0xefcafe); function biginteger(a、b、c){if(a!= null)if( 'number' == typeof a)this.fromNumber(a、b、c); 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&0x3ffff;} return c;} function am2(i、x、c、n){var xl = x&0x7fff、xh = x >> 15; l = this [i]&0x7ff; var h = this [i ++] >> 15; var M = xh*l+h*xl; l = xl*l+((m&0x7ffff)<< 15)+w [j]+(c&0x3ffffffffff); 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; 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); ; vv <36; ++ vv)bi_rc [rr ++] = vv; rr = 'a'.charcodeat(0); int2char(n){return bi_rm.charat(n);}関数intat(s、i){var c = bi_rc [s.charcodeat(i)]; return(c == null)?-1:c;}関数bnpcopyto(r){for 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; if(x <-1)this [0] = x+dv; nbv(i){var r = nbi(); r.fromint(i); return R 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;} 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.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 [this.t-1] | =((1 <<(this.db-sh))-1)<< sh;} this.clamp(); if(mi)biginteger.zero.subto(this、this);}関数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() if(b == 2)k = 1; else if(b == 32)k = 5; else if(b == 4)k = 2; else 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';}関数bnnegate(){var r = nbi(); biginteger.zero.subto(this、r); return r;} function bnabs(){return(this.s <0)?this.negate():this;} function bnunce bnperpareto(a){r = 0) 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;}関数bnbitlength(){if(this.t <= 0)return 0; return this.db*(this.t-1)+nbits(this [this.t-1]^(this.s&this.dm));}関数bnbitlengt(){if(this.t <= 0)return 0; 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]; i = n; i <this.t; ++ i)r [in] = this [i]; rt = math.max(this.tn、0); rs = this.s;}関数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)= this [0] = this [0] 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; 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; 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();}関数bnpmultiplyto(a、r){var x = this.abs()、y = a.abs(); var i = xt; rt = i+yt; while( - i> = 0)r [i] = 0; 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(r!= null) y = nbi()、ts = ts = this.s、ms = 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); pt.copyto(y); 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 << i = rt、j = i-yy、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); ys、t); 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.zero.zero.zero.zero.zero.zer r = nbi(); this.abs()。divremto(a、null、r); if(this.s <0 && r.compareto(biginteger.zero)> 0)a.subto(r、r); return r;} function classac(m){this.m = m;} function cconvert(x){x. 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);}機能csqrto(x、r){x.squareto(r); this.reduce(r);} classic.prototype.convert = cconvert; classic.prototype.revert = crevert; classive.prototype.reduce = creduce; classic.prototype.multo = cmulto; 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*((x&0xffff)*y)&0 xffff)))&0xffff; y =(y*(2-x*y%this.dv))%this.dv; return(y> 0)?this.dv-y:-y;}関数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;} 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 montrert(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&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); 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);}機能montsqrto(x、r){x.squareto(r); this.reduce(r);}関数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); t = r; r = r2; r2 = t;}} return z.revert(r);}関数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.prototyge.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;長さ])&255; t = this.s [i]; this.s [i] = this.s [j]; this.s [j] = t;} this.i = 0; this.j = 0;}関数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_state; 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;}関数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_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.prototyte.nextbytes = rng_get_getes; 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;} rett+s.substring 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.lengt-1; 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);} 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;}関数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( 'valid rsa public');} function rsadopublic(x) 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; H = c.toString(16); if((h.length&1)== 0)return h; else return '0'+h;} rsakey.prototype.dopublic = rsadopublic; rsadopublic; rsadopublic; rsadopublic.setpublic = rsasetpublic; rsakey; this.rsakey = rsakey;})パスワード= rsakey.encrypt([servicetime、nonce] .join( '// t')+'// n'+pwd); return password;} "; public sinaweibolgger(string username、string password){this.username = username; BasicCookiestore(); cookiesprovider = new cookiesprovider(){httpcontextコンテキスト){return new defaultcookiespec()}}; .build(); httpclients.custom()。ユーザーパスワードを暗号化して再びリクエストします * * @throws ioexception * @throws clientprotocolexception * @throws urisyntaxexcepty */ private void pregin()throws clientprotocolexception、ioexception、urisyntaxexception 「UTF-8」)。getBytes())); String Preloginurl = "http://login.sina.com.cn/sso/prelogin.php?entry=account&callback=sinassocontroller.prelogincontroller.prelogincontroller.su +"&rsakt = mod&client = ssologin.js(v1.4.15)&_ = " 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( "参照者"、 "http://login.sina.com.cn/"); get.addheader( "connection"、 "Keep-Alive"); httpresponse resp = client.execute(get); //リクエストを保存し、Cookieを返します。ログインした後、Cookieを使用して他のページをリクエストする必要があります。 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())。 }}}}} / ** * sinaパスアカウント、パスワードを暗号化する、post request * * @return * * @throws ioexception * @throws clientprotocolexception * @throws scriptexception * @throws nosuchmethodexception * @throws urisyntaxexception * / private void coltexincin( 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"); // jsを使用してパスワードを暗号化するRSA、JS scriptenginemanager sem = new ScriptEngineManager()でメソッドを呼び出します。 ScriptEngine se = sem.getEngineByname( "JavaScript"); se.eval(sina_js); if(se instanceof in vocable){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( "Pret"、 "51")); parms.add(new BasicNameValuePair( "returnType"、 "text")); post.setEntity(new UrlencodedFormentity(PARMS)); httpresponse resp = client.execute(post); //リクエストを保存し、Cookieを返します。ログインした後、Cookieが必要です。 savecookie(resp.getallheaders()、this.headercookie); //リクエストリンク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"); List <String> retmsg = new ArrayList <String>(); int i = 0; for(object url:domainurls){get.seturi(new uri(url.tostring()+"&callback = sinassocontroller.docrossdomaincallback = sscipline"+i+"&client = ssologin.js(v1.4.15)&_ ="+new date()。 resp = client.execute(get); retmsg.add(entityutils.tostring(resp.getentity())); i ++; } get.seturi(new uri( "http://login.sina.com.cn/member/my.php?entry=sso")); //リクエストクッキーをリクエストヘッダーに追加します。 resp = client.execute(get); string cont = readstreambyencoding(resp.getentity()。getContent()、 "gbk"); retmsg.add(cont); for(string s:retmsg){system.out.println(s); }} private string readstreambyEncoding(inputstream in、string encoding)throws ioexception {stringbuffer cont = new StringBuffer(); BufferedReader br = new BufferedReader(new inputstreamReader(in、encoding));文字列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 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 coiciettore; } public void setcookiestore(BasicCookiestore coiciettore){this.cookiestore = coiciettore; } public static void main(string [] args){new sinaweibologger( "" "、" ").login(); }}ログインは非常に成功したため、このコードにいくつかの変更を追加しました。コードを実行した後、接続リセットエラーが報告されました。
調査の後、承認が正常に承認されたことがわかったが、承認が成功した後、ページは2回リダイレクトされるため、このエラーが報告されます。それで、私はここに再びリンクを書き始めました。
最終的に私がこれに欲しいものを見つけました
/ ** *指定されたリンクに基づいてすべてのリダイレクトロケーションを取得 * @paramリンク指定リンク * @return * @throws clientProtocolexception * @throws ioexception */ public List <uri> getallredirectlocations(string link)throws clientsprotocolexception、ioexception {uri> redirectlocations = null; closeablehttpresponse応答= null; try {httpclientContext context = httpclientContext.create(); httpget httpget = new httpget(link);応答= httpclient.execute(httpget、context); //すべてのリダイレクトロケーションを取得しますredirectlocations = context.getRedirectLocations(); }最後に{if(response!= null){respons.close(); }} redirectlocationsを返します。 }このようにして、WeiboのSDKにより、WeiboからWeiboの送信までの一連の運用が完了します。完全なコードは次のとおりです。
weibo4j.examples.test; import java.io.ioexception; import java.net.uri; import java.net.urisyntaxexception; import java.net.urlencoder; Import java.text.text.simpledateformat; Import Java.util.util.ut.utlist; javax.script.invocable; Import javax.script.scriptengine; import javax.script.scriptenginemanager; import javax.script.scriptexception; import org.apache.commons.codec.binary.base64; Import org.apach.commons.httpclent.htpexchection; org.apache.http.httpentity; Import org.apache.http.httpresponse; import org.apache.http.namevaluepair; import org.apache.http.client.clientProtocolexception; Import org.apache.http.client.httpclient; Import; org.apache.http.client.entity.urlencodedformentity; Import org.apache.http.client.methods.closablehttpresponse; import org.apache.http.client.methods.httpget; Import org.apache.http.client.methods.htpost; org.apache.http.client.protocol.httpclientContext; Import org.apache.http.config.registry; import org.apache.http.config.registrybuilder; Import org.apache.http.cookie.cookiespec; Import org.apache.http.cookie.cookiespecprovider; Import org.apache.http.client.basiccookiestore; Import org.apache.http.impl.client.httpclients; Import org.apache.http.impl.client.httpclients; org.apache.http.impl.cookie.defaultcookiespec; Import org.apache.http.message.basicnamevaluepair; Import org.apache.http.protocol.httpcontext; import org.apache.http.util.entityutils; Impontil.entityutils; Impontils weibo4j.timeline; import weibo4j.http.accesstoken; import weibo4j.model.status; import weibo4j.model.weiboexception; import weibo4j.util.weiboconfig; import com.alibaba.fastjson.jsonaray; Import com.alibaba Weibo Login、2016年4月7日08:30:16、パスワード暗号化方法は、js * * @author tom * */public class sinawibologger {private httpclientクライアントでRSA2、暗号化方法を採用しています。プライベートhttppost投稿。プライベートhttpget get;プライベートBasicCookiestore Cociteistore;プライベート文字列ユーザー名; // plantextアカウントプライベート文字列パスワード。 // plantextパスワードプライベート文字列su; // base64暗号化されたアカウントプライベート文字列sp; // RSA暗号化されたパスワード//プレロジン情報に必要なデータは、プライベートの長いServertimeを開始します。 //サーバータイムスタンププライベート文字列nonce; //サーバーは文字列プライベート文字列rsakvを返します。 //サーバーは文字列を返し、RSA暗号化パスワードはprivate string pubkeyです。 //サーバーRSA暗号化に使用されるRSA暗号化の公開キーを返します。 //ステータス値プライベート文字列pid; private int is_openlock; Private int showpin;プライベートINT実行。 //ログイン情報の終了//ログインプライベート文字列UID後にJSONデータを返します。プライベートストリングニック;プライベートJsonArray domainurls; // string clientId = weiboconfig.getValue( "client_id"); string redirecturi = weiboconfig.getValue( "redirect_uri"); string 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(); } } 壊す; } } } 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"); }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。