java寫的模擬post登陸新浪微博抓微博號

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.UnsupportedEncodingException;


import java.net.URLEncoder;


import java.util.ArrayList;

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;


import java.util.Date;


import java.util.List;


import org.apache.commons.codec.binary.Base64;

import org.apache.commons.httpclient.methods.PostMethod;


import org.apache.http.HttpResponse;


import org.apache.http.NameValuePair;


import org.apache.http.client.entity.UrlEncodedFormEntity;


import org.apache.http.client.methods.HttpGet;


import org.apache.http.client.methods.HttpPost;


import org.apache.http.client.params.CookiePolicy;


import org.apache.http.impl.client.DefaultHttpClient;


import org.apache.http.message.BasicNameValuePair;


import org.apache.http.params.HttpConnectionParams;


import org.apache.http.protocol.HTTP;


import org.apache.http.util.EntityUtils;

import org.htmlparser.Node;

import org.htmlparser.NodeFilter;

import org.htmlparser.Parser;

import org.htmlparser.filters.TagNameFilter;

import org.htmlparser.nodes.TagNode;

import org.htmlparser.util.NodeList;

import org.htmlparser.util.ParserException;

import org.htmlparser.util.SimpleNodeIterator;


public class Sina {


/**

*

* @param args

*/

private static DefaultHttpClient client = new DefaultHttpClient();


private static HttpGet getMethod;

private static int i = 1;

private static boolean state = true;

private static DB db = new DB();

private static String address;

private static String category = "";

private static String oldAddress = "";


public void login() {


String entity = "";


client.getParams().setParameter("http.protocol.cookie-policy",


CookiePolicy.BROWSER_COMPATIBILITY);


client.getParams().setParameter(


HttpConnectionParams.CONNECTION_TIMEOUT, 5000);


try {


HttpPost post = new HttpPost(


"http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.22)");


String data = getServerTime();


String nonce = makeNonce(6);


List<namevaluepair> nvps = new ArrayList<namevaluepair>();/<namevaluepair>/<namevaluepair>


nvps.add(new BasicNameValuePair("entry", "weibo"));


nvps.add(new BasicNameValuePair("gateway", "1"));


nvps.add(new BasicNameValuePair("from", ""));


nvps.add(new BasicNameValuePair("savestate", "7"));


nvps.add(new BasicNameValuePair("useticket", "1"));


nvps.add(new BasicNameValuePair("ssosimplelogin", "1"));


nvps.add(new BasicNameValuePair("su",


encodeAccount("你的賬號")));


nvps.add(new BasicNameValuePair("service", "miniblog"));


nvps.add(new BasicNameValuePair("servertime", data));


nvps.add(new BasicNameValuePair("nonce", nonce));


nvps.add(new BasicNameValuePair("pwencode", "wsse"));


nvps.add(new BasicNameValuePair("sp", new SinaSSOEncoder().encode(


"密碼", data, nonce)));


nvps

.add(new BasicNameValuePair(


"url",


"http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack"));


nvps.add(new BasicNameValuePair("returntype", "META"));


nvps.add(new BasicNameValuePair("encoding", "UTF-8"));


nvps.add(new BasicNameValuePair("vsnval", ""));


post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));


HttpResponse response = client.execute(post);

entity = EntityUtils.toString(response.getEntity());


String url = entity.substring(entity


.indexOf("http://weibo.com/ajaxlogin.php?"), entity


.indexOf("code=0") + 6);


// url


HttpGet getMethod = new HttpGet(url);

response = client.execute(getMethod);


entity = EntityUtils.toString(response.getEntity());


entity = entity.substring(entity.indexOf("userdomain") + 13, entity


.lastIndexOf("\""));


// System.out.println(entity);

String rnd = String.valueOf(System.currentTimeMillis());


} catch (Exception e) {

// TODO: handle exception

}

}


public void postweibo() {


try {

String rnd = String.valueOf(System.currentTimeMillis());

HttpPost po = new HttpPost(

"http://www.weibo.com/aj/mblog/add?__rnd=" + rnd);

po.setHeader("Host", "weibo.com");

po

.setHeader(

"User-Agent",

"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.27) Gecko/20120216 Firefox/3.6.27");

po

.setHeader("Accept",

"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");

po.setHeader("Accept-Language", "zh-cn,zh;q=0.5");

po.setHeader("X-Requested-With", "XMLHttpRequest");

po.setHeader("Connection", "keep-alive");

po.setHeader("Keep-Alive", "115");

// po.setHeader("Accept-Encoding", "gzip,deflate");

// po.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");

po.setHeader("Content-Type",

"application/x-www-form-urlencoded; charset=UTF-8");

po

.setHeader(

"Cookie",

"UOR=www.hao123.com,weibo.com,; ULV=1340765073888:8:8:4:4688432092614.525.1340765073834:1340703054967; myuid=2564779282; [email protected]; ALF=1341212662; wvr=3.6; ads_ck=0; SinaRot/3/336396964%3Fwvr%3D3.6%26lf%3Dreg=34; SinaRot/3/336396964=44; SUS=SID-2564779282-1340765058-JA-n7e8d-961416038237762579a7ab19ca080fcc; SUE=es%3Da60b06450448833f66be957ff9972026%26ev%3Dv1%26es2%3Df5bb9e1a309ba646bd7a95b7f69731a2%26rs0%3DsftZRxYfASmFFINvWsEz2Ji3wLWir6XbvBKoe0y56kHouwuPekRdDf5YzKKJI6xjwjtBrjpAOMLzIiZbqB5uEcpMsD2wgiqqhuDHaAt%252B%252Fe5K5hgm60s4%252FKOAtRWqw%252BPj2t96338HGMCrby5WbRDt%252BNs0KSEwFWlvn35wj1hN30I%253D%26rv%3D0; SUP=cv%3D1%26bt%3D1340765058%26et%3D1340851458%26d%3Dc909%26i%3D9db4%26us%3D1%26vf%3D0%26vt%3D0%26ac%3D0%26uid%3D2564779282%26user%3Dnoumiandc817%2540163.com%26ag%3D4%26name%3Dnoumiandc817%2540163.com%26nick%3Dgooleee%26fmp%3D%26lcp%3D; SSOLoginState=1340764910; USRHAWB=usrmdins211_114; _s_tentry=login.sina.com.cn; Apache=4688432092614.525.1340765073834; SINAGLOBAL=4688432092614.525.1340765073834");


List<namevaluepair> npost = new ArrayList<namevaluepair>();/<namevaluepair>/<namevaluepair>

npost.add(new BasicNameValuePair("text", "weibo"));

npost.add(new BasicNameValuePair("pic_id", ""));

npost.add(new BasicNameValuePair("rand", ""));

npost.add(new BasicNameValuePair("_surl", ""));

npost.add(new BasicNameValuePair("module", "stissue"));

npost.add(new BasicNameValuePair("_t", "0"));

po.setEntity(new UrlEncodedFormEntity(npost, HTTP.UTF_8));


HttpResponse responses = client.execute(po);

System.out.println(EntityUtils.toString(responses.getEntity(),

"UTF-8"));


} catch (Exception e) {

}

}


public static String getHtml(String url1) {

String entity = "";

try {


getMethod = new HttpGet(url1);


HttpResponse response = client.execute(getMethod);


entity = EntityUtils.toString(response.getEntity(), "utf-8");


// Document doc =


// Jsoup.parse(EntityUtils.toString(response.getEntity()));


// System.out.println(entity);

} catch (Exception e) {

// TODO: handle exception

}

return entity;

}


public static String testHtml(String url) {

String sCurrentLine;

String sTotalString;

sCurrentLine = "";

sTotalString = "";


try {


java.io.InputStream l_urlStream;

java.net.URL l_url = new java.net.URL(url);

java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url

.openConnection();

l_connection.connect();

l_urlStream = l_connection.getInputStream();

java.io.BufferedReader l_reader = new java.io.BufferedReader(

new java.io.InputStreamReader(l_urlStream));


// File file = new File("D:/a.txt");

// BufferedReader l_reader = null;


// l_reader = new BufferedReader(new FileReader(file));


int line = 1;

// ζУnull


while ((sCurrentLine = l_reader.readLine()) != null) {

sTotalString += sCurrentLine;

}

// System.out.println(sTotalString);


// System.out.println(" ==================== ");

// findAllImgTagSrc(sTotalString);

// System.out.println(testText);

} catch (Exception e) {

e.printStackTrace();

}

return sTotalString;


}


public static void getWeibo() {

Set<string> slist = new HashSet();/<string>

Parser parser = new Parser();

NodeFilter filter;

NodeList list = new NodeList();

try {

parser.setInputHTML(getHtml("http://s.weibo.com" + address));

System.out.println("http://s.weibo.com" + address);

System.out.println(getHtml("http://s.weibo.com" + address));

filter = new TagNameFilter("a");

list = parser.extractAllNodesThatMatch(filter);

} catch (ParserException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}


System.out.println("IMG tags number :" + list.size());

SimpleNodeIterator iterator = list.elements();


while (iterator.hasMoreNodes()) {

String s = "";

//

Node node = iterator.nextNode();

TagNode tagNode = new TagNode();

// TagNode е

tagNode.setText(node.toHtml());

if (tagNode.getAttributeEx("onclick") != null

&& tagNode.getAttributeEx("title") != null) {

// if(tagNode.getAttributeEx("title")!=null){

s = tagNode.getAttributeEx("title").toString();

// if(s.indexOf("@")!=-1){

s = s.substring(7, s.length() - 1);

// state=true;

slist.add(s);

}

if (tagNode.getAttributeEx("href") != null

&& tagNode.getAttribute("class") != null) {

String ss = tagNode.getAttribute("class").toString();

// System.out.println(ss);

if (ss.equals("W_btn_a")) {

address = tagNode.getAttributeEx("href").toString();

// if(s.indexOf("@")!=-1){

address = address.substring(6, address.length() - 1);


}


}


}

/*

* while(iterator.hasMoreNodes()){ String s = ""; // Node

* node = iterator.nextNode(); TagNode tagNode = new TagNode(); //

* TagNode е tagNode.setText(node.toHtml());

* if (tagNode.getAttributeEx("class").equals("W_btn_a")) { //

* if(tagNode.getAttributeEx("title")!=null){ s =

* tagNode.getAttributeEx("href").toString(); // if(s.indexOf("@")!=-1){

* System.out.println(s); // state=true; } }

*/


Iterator<string> it = slist.iterator();/<string>

while (it.hasNext()) {

String str = it.next();

// System.out.println("@"+str);

// int start=str.indexOf("(");

// int end=str.indexOf(")");

// str=str.substring(start+1, end);

System.out.println("@" + str);

if (db.checkUser(str) != 1) {

db.addUser(str, category);

}

/*

* String url2 = java.net.URLDecoder(

* "\\\\u62b1\\\\u6b49\\\\uff0c\\\\u6b64\\\\u5fae\\\\u535a\\\\u4e0d\\\\u5b58\\\\u5728\\\\u54e6\\\\uff0c\\\\u6362\\\\u4e00\\\\u4e2a\\\\u8bd5\\\\u8bd5\\\\u5427\\\\u3002"

* , "utf-8");

*/

/* System.out.println(url2); */

}

// getWeibo("http://s.weibo.com"+address);

/*System.out.println(address);

// address = "http://s.weibo.com" + address;

if (!oldAddress.equals(address)) {

oldAddress = address;

getWeibo();

}*/

/*

* i++; testHtml();

*/

}


public static void main(String[] args) throws UnsupportedEncodingException {

Sina sina = new Sina();

sina.login();


//Sina.category = "太胖";

//db.addCategory(category);

//String url2 = java.net.URLEncoder.encode(category, "utf-8");

//System.out.println(url2);

//Sina.address = "/weibo/" + url2;

sina.getWeibo();

//WriteTxt wt = new WriteTxt();


//wt.WriteFile(category, db.getAll(category));

//sina.getHtml("http://s.weibo.com/weibo/1?topnav=1&wvr=3.6&b=1");

// sina.postweibo();

/*

* sina.login();sina.getWeibo(

* "http://s.weibo.com//weibo/%25E6%2583%25B3&b=1&rd=MjY5O&page=4");

*/


/*

* DefaultHttpClient client = new DefaultHttpClient();

*

* client.getParams().setParameter("http.protocol.cookie-policy",

*

* CookiePolicy.BROWSER_COMPATIBILITY);

*

* client.getParams().setParameter(

*

* HttpConnectionParams.CONNECTION_TIMEOUT, 5000);

*

* try {

*

* HttpPost post = new HttpPost(

*

*

*

*

*

*

*

*

* "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.22)");

*

* String data = getServerTime();

*

* String nonce = makeNonce(6);

*

* List<namevaluepair> nvps = new ArrayList<namevaluepair>();/<namevaluepair>/<namevaluepair>

*

* nvps.add(new BasicNameValuePair("entry", "weibo"));

*

* nvps.add(new BasicNameValuePair("gateway", "1"));

*

* nvps.add(new BasicNameValuePair("from", ""));

*

* nvps.add(new BasicNameValuePair("savestate", "7"));

*

* nvps.add(new BasicNameValuePair("useticket", "1"));

*

* nvps.add(new BasicNameValuePair("ssosimplelogin", "1"));

*

* nvps.add(new BasicNameValuePair("su",

*

* encodeAccount("[email protected]")));

*

* nvps.add(new BasicNameValuePair("service", "miniblog"));

*

* nvps.add(new BasicNameValuePair("servertime", data));

*

* nvps.add(new BasicNameValuePair("nonce", nonce));

*

* nvps.add(new BasicNameValuePair("pwencode", "wsse"));

*

* nvps.add(new BasicNameValuePair("sp", new SinaSSOEncoder().encode(

*

* "jde0417", data, nonce)));

*

* nvps .add(new BasicNameValuePair(

*

* "url",

*

* "http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack"

* ));

*

* nvps.add(new BasicNameValuePair("returntype", "META"));

*

* nvps.add(new BasicNameValuePair("encoding", "UTF-8"));

*

* nvps.add(new BasicNameValuePair("vsnval", ""));

*

* post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

*

* HttpResponse response = client.execute(post);

*

* String entity = EntityUtils.toString(response.getEntity());

*

* String url = entity.substring(entity

*

* .indexOf("http://weibo.com/ajaxlogin.php?"), entity

*

* .indexOf("code=0") + 6);

*

* // url

*

* HttpGet getMethod = new HttpGet(url);

*

* response = client.execute(getMethod);

*

* entity = EntityUtils.toString(response.getEntity());

*

* entity = entity.substring(entity.indexOf("userdomain") + 13, entity

*

* .lastIndexOf("\""));

*

* System.out.println(entity); String rnd =

* String.valueOf(System.currentTimeMillis()); getMethod = new HttpGet(

* "http://s.weibo.com/weibo/%25E6%2583%25B3?topnav=1&wvr=3.6&b=1");

*

* response = client.execute(getMethod);

*

* entity = EntityUtils.toString(response.getEntity(), "utf-8");

*

* // Document doc =

*

* // Jsoup.parse(EntityUtils.toString(response.getEntity()));

*

* System.out.println(entity);

*

*

* HttpPost po = new HttpPost(

*

* "http://www.weibo.com/aj/mblog/add?__rnd="+rnd);

*

*

*

* List<namevaluepair> npost = new ArrayList<namevaluepair>();/<namevaluepair>/<namevaluepair>

* npost.add(new BasicNameValuePair("text", "weibo")); npost.add(new

* BasicNameValuePair("pic_id", "")); npost.add(new

* BasicNameValuePair("rand", "")); npost.add(new

* BasicNameValuePair("_surl", "")); npost.add(new

* BasicNameValuePair("module", "stissue")); npost.add(new

* BasicNameValuePair("_t", "0")); po.setEntity(new

* UrlEncodedFormEntity(npost, HTTP.UTF_8));

*

* HttpResponse responses = client.execute(po);

* System.out.println(responses.getEntity());

*

* } catch (Exception e) {

*

* // TODO: handle exception

*

* }

*/


}


private static String encodeAccount(String account) {


String userName = "";


try {


userName = Base64.encodeBase64String(URLEncoder.encode(account,


"UTF-8").getBytes());


} catch (UnsupportedEncodingException e) {


// TODO Auto-generated catch block


e.printStackTrace();


}


return userName;


}


private static String makeNonce(int len) {


String x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";


String str = "";


for (int i = 0; i < len; i++) {


str += x.charAt((int) (Math.ceil(Math.random() * 1000000) % x


.length()));


}


return str;


}


private static String getServerTime() {


long servertime = new Date().getTime() / 1000;


return String.valueOf(servertime);


}


}

新浪微博登陸算法


public class SinaSSOEncoder {

private boolean i=false;

private int g=8;

public SinaSSOEncoder(){

}

public String encode(String psw,String servertime,String nonce){

String password;

password=hex_sha1(""+hex_sha1(hex_sha1(psw))+servertime+nonce);

return password;

}

private String hex_sha1(String j) {

return h(b(f(j,j.length()*g), j.length() * g));

}

private String h(int[] l){

String k = i ? "0123456789ABCDEF" : "0123456789abcdef";

String m = "";

for (int j = 0; j < l.length * 4; j++) {

m += k.charAt((l[j >> 2] >> ((3 - j % 4) * 8 + 4)) & 15) + "" + k.charAt((l[j >> 2] >> ((3 - j % 4) * 8)) & 15);

}

return m;

}

private int[] b(int[] A,int r){

A[r>>5]|=128<

A[((r+64>>9)<<4)+15]=r;

int[] B = new int[80];

int z = 1732584193;

int y = -271733879;

int v = -1732584194;

int u = 271733878;

int s = -1009589776;

for (int o = 0; o < A.length; o += 16) {

int q = z;

int p = y;

int n = v;

int m = u;

int k = s;

for (int l = 0; l < 80; l++) {

if (l < 16) {

B[l] = A[o + l];

} else {

B[l] = d(B[l - 3] ^ B[l - 8] ^ B[l - 14] ^ B[l - 16], 1);

}

int C = e(e(d(z, 5), a(l, y, v, u)), e(e(s, B[l]), c(l)));

s = u;

u = v;

v = d(y, 30);

y = z;

z = C;

}

z = e(z, q);

y = e(y, p);

v = e(v, n);

u = e(u, m);

s = e(s, k);

}

return new int[]{z,y,v,u,s};

}

private int a(int k,int j,int m,int l){

if(k<20){return(j&m)|((~j)&l);};

if(k<40){return j^m^l;};

if(k<60){return(j&m)|(j&l)|(m&l);};

return j^m^l;

}

private int c(int j){

return(j<20)?1518500249:(j<40)?1859775393:(j<60)?-1894007588:-899497514;

}

private int e(int j, int m) {

int l = (j & 65535) + (m & 65535);

int k = (j >> 16) + (m >> 16) + (l >> 16);

return (k << 16) | (l & 65535);

}

private int d(int j,int k){

return(j<>>(32-k));

}

private int[] f(String m,int r){

int[] l;

int j = (1<<this.g>

int len=((r+64>>9)<<4)+15;

int k;

for(k=0;k<m.length>

len = k>>5>len?k>>5:len;

}

l = new int[len+1];

for(k=0;k<l.length>

l[k]=0;

}

for(k=0;k<m.length>

l[k>>5]|=(m.charAt(k/g)&j)<

}

return l;

}

}


將賬號存入數據庫


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;


public class DB {

private Connection conn;

private Statement stmt;

private ResultSet rs;


public Connection getConn() {

String driver = "com.mysql.jdbc.Driver";

String url = "jdbc:mysql://127.0.0.1:3306/weibo?useUnicode=true&characterEncoding=utf-8";

String user = "root";

String password = "root";

try {

Class.forName(driver);

conn = DriverManager.getConnection(url, user, password);

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}


public int checkUser(String s) {

int i = 0;

getConn();

try {

stmt = conn.createStatement();

String sql = "select * from users where name='" + s + "'";


rs = stmt.executeQuery(sql);

if (rs.next()) {

i = 1;

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

closeConn();

return i;

}


public List<string> getAll(String s) {/<string>

List<string> list = new ArrayList();/<string>

getConn();

try {

stmt = conn.createStatement();

String sql = "select name from users where categoryId=(select id from category where name='"

+ s + "')";

// System.out.println(sql);

rs = stmt.executeQuery(sql);

while (rs.next()) {

list.add(rs.getString(1));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

closeConn();

return list;

}


public void addUser(String s, String name) {

getConn();

try {

stmt = conn.createStatement();

String sql = "insert into users(name,categoryId) values('" + s

+ "',(select Id from category where name='" + name + "') )";

stmt.executeUpdate(sql);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

closeConn();


}


public void addCategory(String name) {

getConn();

try {

stmt = conn.createStatement();

String sql = "select * from category where name='" + name + "'";


rs = stmt.executeQuery(sql);

if (!rs.next()) {

sql = "insert into category(name) values('" + name + "')";

stmt.executeUpdate(sql);

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

closeConn();


}


public void closeConn() {

if (stmt != null) {

try {

stmt.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}


}

根據關鍵詞輸出所有賬號到txt文件

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.util.List;


public class WriteTxt {

String file = "";

private static String category="";


public void WriteFile(String s, List<string> list) {/<string>

file = "D:/weibo/"+s+".txt";

BufferedWriter write = null;


try {

write = new BufferedWriter(new FileWriter(file));

for (int i = 0; i < list.size(); i++) {

write.write("@" + list.get(i));

write.newLine();


}


write.flush();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


public static void main(String[] args) {

WriteTxt wt = new WriteTxt();

WriteTxt.category="關鍵字";

DB db=new DB();

wt.WriteFile(category, db.getAll(category));


}

}

數據庫兩張表

CREATE TABLE `category` (

`Id` int(11) NOT NULL auto_increment,

`name` varchar(255) default NULL,

PRIMARY KEY (`Id`)

) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8;


CREATE TABLE `users` (

`Id` int(11) NOT NULL auto_increment,

`name` varchar(255) default NULL,

`state` varchar(255) default '0',

`categoryId` int(11) default NULL,

PRIMARY KEY (`Id`),

KEY `categoryId` (`categoryId`),

CONSTRAINT `users_ibfk_1` FOREIGN KEY (`categoryId`) REFERENCES `category` (`Id`) ON DELETE CASCADE

) ENGINE=InnoDB AUTO_INCREMENT=22273 DEFAULT CHARSET=utf8;


用了下幾分鐘可以抓一千個號,我已經抓了兩萬多個了,不過最近新浪改版了,得重新設計程序 了

"/<m.length>

/<l.length>

/<m.length>

/<this.g>


分享到:


相關文章: