- 浏览: 376513 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
登录的类主要有3个,BigIntegerRSA.java加密类、SinaSSOEncoder密码加密类、SinaLogonDog登录类。
1、SinaLogonDog.java代码如下:
2、BigIntegerRSA.java相关的加密算法类
3、SinaSSOEncoder.java密码加密的类
1、SinaLogonDog.java代码如下:
package com.crawler.sina.login; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import java.util.Date; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author TonyJ * @Time 2013-7-1 上午02:08:49 * */ public class SinaLogonDog { private static final Log logger = LogFactory.getLog(SinaLogonDog.class); //http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.15)&_=1403086131206 //这个public key是通过上面的地址请求获取的。 static String SINA_PK = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D24" + "5A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD39" + "93CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE" + "1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"; MultiThreadedHttpConnectionManager connectionManager =new MultiThreadedHttpConnectionManager(); HttpClient client = new HttpClient(connectionManager); public HttpClient logonAndValidate(String userName,String pwd) throws HttpException, IOException { String su = encodeAccount(userName); String initPageURL = "http://login.sina.com.cn/sso/prelogin.php?entry=sso&" + "callback=sinaSSOController.preloginCallBack&su=" + su + "&rsakt=mod&client=ssologin.js(v1.4.5)" + "&_=" + getServerTime(); GetMethod getMethod = newGetMethod(initPageURL); client.executeMethod(getMethod); InputStream is = getMethod.getResponseBodyAsStream(); String response = inputStreamToString(is, null); String jsonBody = StringUtils.substringBetween(response, "(", ")"); String nonce = ""; long servertime = 0L; String rsakv = ""; nonce = StringUtils.substringBetween(jsonBody, "nonce\":\"", "\""); rsakv = StringUtils.substringBetween(jsonBody, "rsakv\":\"", "\""); servertime = Long.parseLong(StringUtils.substringBetween(jsonBody, "servertime\":", ",")); getMethod.releaseConnection(); String logonPageURL = "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.5)"; PostMethod postMethod2Logon = newPostMethod(logonPageURL); String pwdString = servertime + "\t" + nonce + "\n" + pwd; String sp = ""; try { sp = new BigIntegerRSA().rsaCrypt(SINA_PK, "10001", pwdString); } catch (InvalidKeyException e) { logger.error("AES加密密钥大于128!", e); } catch (IllegalBlockSizeException e) { logger.error(e); } catch (BadPaddingException e) { logger.error(e); } catch (NoSuchAlgorithmException e) { logger.error(e); } catch (InvalidKeySpecException e) { logger.error(e); } catch (NoSuchPaddingException e) { logger.error(e); } // SinaSSOEncoder sso = new SinaSSOEncoder(); // String sp = sso.encode(account.getPasswd(), servertime, nonce); logger.info("su=" + su); logger.info("servertime=" + servertime); logger.info("nonce=" + nonce); logger.info("sp=" + sp); logger.info("su=" + su + "&servertime=" + servertime + "&nonce=" + nonce + "&sp=" + sp); postMethod2Logon .setRequestBody(new NameValuePair[] { new NameValuePair("entry", "weibo"), new NameValuePair("gateway", "1"), new NameValuePair("from", ""), new NameValuePair("savestate", "7"), new NameValuePair("useticket", "1"), new NameValuePair("ssosimplelogin", "1"), new NameValuePair("useticket", "1"), new NameValuePair("vsnf", "1"), new NameValuePair("vsnval", ""), new NameValuePair("su", su), new NameValuePair("service", "miniblog"), new NameValuePair("servertime", servertime + ""), new NameValuePair("nonce", nonce), new NameValuePair("pwencode", "rsa2"), new NameValuePair("rsakv", rsakv), new NameValuePair("sp", sp), new NameValuePair("encoding", "UTF-8"), new NameValuePair("prelt", "115"), new NameValuePair("url", "http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack"), new NameValuePair("returntype", "META") }); int statusCode = client.executeMethod(postMethod2Logon); if (statusCode == HttpStatus.SC_OK) { System.out.println("ok"); } postMethod2Logon.releaseConnection(); logger.info(postMethod2Logon.getResponseHeaders()); // 验证是否登录成功 Cookie cookie = new Cookie("weibo.com", "wvr", "3.6", "/", new Date(2099, 12, 31), false); client.getState().addCookie(cookie); Cookie[] cookies = client.getState().getCookies(); boolean containsSue = false; boolean containsSup = false; for (Cookie singleCookie : cookies) { String domain = singleCookie.getDomain(); logger.info(domain); if (domain.equals(".sina.com.cn")) { singleCookie.setDomain("weibo.com"); } logger.info(singleCookie); if (singleCookie.getName().equals("SUE")) { containsSue = true; } if (singleCookie.getName().equals("SUP")) { containsSup = true; } } return client; } public void init(){ MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager(); client = new HttpClient(connectionManager); client.getParams().setCookiePolicy("compatibility"); client.getParams().setParameter("http.protocol.single-cookie-header", Boolean.valueOf(true)); client.getParams().setSoTimeout(20000); client.getHttpConnectionManager().getParams().setConnectionTimeout( 20000); } // inputstream转化为String类型 public static String inputStreamToString(InputStream is, String charset) throws IOException { int i = -1; ByteArrayOutputStream baos = new ByteArrayOutputStream(); while ((i = is.read()) != -1) { baos.write(i); } if (null == charset) { return baos.toString(); } else { return baos.toString(charset); } } protected PostMethod newPostMethod(String url) { PostMethod postMethod = new PostMethod(url); postMethod .setRequestHeader( "Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"); postMethod.setRequestHeader("Referer", "http://weibo.com/"); postMethod.setRequestHeader("Accept-Language", "zh-cn"); postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); postMethod.setRequestHeader("Accept-Encoding", "gzip, deflate"); postMethod .setRequestHeader( "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; InfoPath.2)"); postMethod.setRequestHeader("Connection", "Keep-Alive"); postMethod.setRequestHeader("Cache-Control", "no-cache"); return postMethod; } public static String decode(String string) { return string.replaceAll("%3A", ":").replaceAll("%2F", "/").replaceAll("%3D", "=") .replaceAll("%26", "&"); } // 用户名编码 @SuppressWarnings("deprecation") private String encodeAccount(String account) { return (new sun.misc.BASE64Encoder()).encode(URLEncoder.encode(account).getBytes()); } // 六位随机数nonce的产生(不用) public 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; } // servertime的产生(不用) public String getServerTime() { long servertime = new Date().getTime() / 1000; return String.valueOf(servertime); } protected GetMethod newGetMethod(String url) { GetMethod getMethod = new GetMethod(url); getMethod.setRequestHeader("Accept","image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"); getMethod.setRequestHeader("Accept-Language", "zh-CN"); getMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8"); getMethod.setRequestHeader("Accept-Encoding", "deflate"); getMethod.setRequestHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; CIBA; MAXTHON 2.0)"); getMethod.setRequestHeader("Connection", "Keep-Alive"); getMethod.setRequestHeader("Cache-Control", "no-cache"); return getMethod; } }
2、BigIntegerRSA.java相关的加密算法类
package com.crawler.sina.login; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAPublicKeySpec; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import org.apache.commons.codec.binary.Hex; /** * @author TonyJ * @Time 2013-7-1 上午02:12:46 * */ public class BigIntegerRSA { public String rsaCrypt(String modeHex, String exponentHex, String messageg) throws IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException { KeyFactory factory = KeyFactory.getInstance("RSA"); BigInteger m = new BigInteger(modeHex, 16); /* public exponent */ BigInteger e = new BigInteger(exponentHex, 16); /* modulus */ RSAPublicKeySpec spec = new RSAPublicKeySpec(m, e); RSAPublicKey pub = (RSAPublicKey) factory.generatePublic(spec); Cipher enc = Cipher.getInstance("RSA"); enc.init(Cipher.ENCRYPT_MODE, pub); byte[] encryptedContentKey = enc.doFinal(messageg.getBytes("GB2312")); return new String(Hex.encodeHex(encryptedContentKey)); } }
3、SinaSSOEncoder.java密码加密的类
package com.crawler.sina.login; 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<<(24-r%32); 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<<k)|(j>>>(32-k)); } private int[] f(String m,int r){ int[] l; int j = (1<<this.g)-1; int len=((r+64>>9)<<4)+15; int k; for(k=0;k<m.length()*g;k+=g){ len = k>>5>len?k>>5:len; } l = new int[len+1]; for(k=0;k<l.length;k++){ l[k]=0; } for(k=0;k<m.length()*g;k+=g){ l[k>>5]|=(m.charAt(k/g)&j)<<(24-k%32); } return l; } }
发表评论
-
腾讯手机邮箱模拟登录(未完成)
2014-11-19 17:14 0关于httpclient模拟登录腾讯邮箱(手机端), 目前正在 ... -
HttpClient4.3 创建SSL协议的HttpClient对象
2014-11-07 11:13 1136public class HttpClientUtils { ... -
对比浏览器,casperjs,httpclient的Header信息
2014-11-04 11:57 1449@Override protected void d ... -
phantomjs安装(linux,附带环境变量设置) ,以及casperjs安装。
2014-09-24 10:55 73631. 首先从官网http://phantomjs.org/下载 ... -
httpclient post请求没设有置编码的问题
2014-05-30 14:19 1513某个网站要通过post请求来返回数值。 使用httpclie ... -
httpclient版本
2014-05-26 18:05 816这几天一直没弄明白org.apache.commons.htt ... -
jsoup使用笔记
2014-08-28 10:44 994<dependency> <groupI ...
相关推荐
在本文中,我们将深入探讨如何使用Java来模拟登录新浪微博这一话题...总的来说,Java模拟登录新浪微博涉及了HTTP协议、网络请求、HTML解析、会话管理等多个方面,通过不断学习和实践,开发者可以有效地实现这样的功能。
简单的java swing 编写的新浪微博用户登陆客户端。 在本地运行时,需要自己修改config.properties中client_ID和client_SERCRET属性的值。这两个值需要自己通过注册得到。
利用账号密码模拟登录新浪微博,文件中用到了shiro的base64加密以及一些JSON包,使用前请先下载。
为了更好地理解和应用上述理论,可以分析并运行这些代码,以便在实践中学习和掌握Java模拟登录的具体实现。 总之,模拟登录新浪微博是一项技术含量较高的任务,需要对HTTP协议、网络请求以及HTML解析有深入的理解。...
在这个场景中,我们关注的是如何使用HTTPClient 4库来模拟登录新浪微博。首先,我们需要理解HTTPClient库的基本概念。 HTTPClient是一个强大的Java库,用于处理HTTP请求和响应。它提供了丰富的功能,包括支持HTTPS...
2016年4月7最新新浪微博模拟登录HttpClient4.5.2
java模拟浏览器登陆新浪微博爬取用户信息 新建java工程把包导入即可,仅供参考
java模拟新浪微博登录,通过调用微博SDK发布新信息.个人测试可以使用。 java模拟新浪微博登录,通过调用微博SDK发布新信息.个人测试可以使用。
今天我们将聚焦于“新浪微博2模拟登陆”这一主题,学习如何通过编程方式模拟登录并获取AccessToken,以便进行自动化操作或者数据分析。 首先,我们需要了解什么是模拟登陆。模拟登陆是指通过编程代码来模拟用户在...
Java模拟新浪和腾迅自动登录并发送微博(2013年3月更新可用)
总结来说,Java模拟新浪微博登录抓取数据的过程涉及到网络通信、加密解密、数据解析等多个环节,需要对相关技术有深入理解才能实现。实际应用中,还需要注意处理验证码、会话管理、登录状态保持等问题,以确保完整且...
在本文中,我们将深入探讨如何使用OAuth2协议模拟登录新浪微博,并了解相关技术细节。OAuth2是一种授权框架,允许第三方应用代表用户与服务提供商进行交互,例如发布微博。在这个例子中,我们将使用Java的Apache ...
1. 模拟登录新浪微博网站,获取登录后才能访问的页面; 2. 解析页面内容,提取关注和粉丝列表的URL链接; 3. 对每个链接发起请求,获取用户的具体信息; 4. 将获取的数据进行清洗和处理,保存到CSV文件中。 **详细...
在这个数仓项目中,我们主要关注的是如何利用大数据分析技术对模拟的新浪微博数据进行处理和挖掘。这个项目涉及的关键知识点主要包括大数据技术、数据仓库、数据采集以及数据分析。 首先,我们需要理解“数据仓库”...
在进行研究的过程中,研究团队首先分析了新浪微博的数据结构和用户行为模式,明确了爬虫系统的功能需求,包括用户模拟登录、网页爬取、数据提取和任务调度等。针对这些需求,研究团队设计了一套完整的数据采集流程和...
本主题聚焦于使用Java实现对新浪微博的模拟登录,这对于数据分析、信息抓取或自动化测试等应用场景具有重要意义。 【描述】:“新浪微博模拟登陆源代码,java实现,微博数据抓取” 这段描述揭示了几个关键点: 1....
对于Java开发者来说,与新浪微博和QQ这样的社交网络进行交互,可以帮助他们构建各种功能,如分享内容、获取用户信息、实现社交登录等。本篇文章将深入探讨如何在Java项目中使用新浪微博和QQ的API进行开发。 首先,...
这个项目是基于对新浪微博功能的模拟,旨在提供一个类似平台,用户可以在这里分享他们的想法、上传图片,并与他人互动。通过分析“JustShare”这个文件名,我们可以推测这可能是实现这一功能的核心代码库或者模块。 ...
《疯狂java新浪微博代码》是一个关于如何使用Java编程语言来实现新浪微博功能的教程资源。这个压缩包文件包含了李韩飞老师精心编写的代码示例,旨在帮助开发者深入理解微博应用的后端开发技术,以及如何利用Java进行...