public static Cookie[] getWCookies(String username,String password) throws HttpException, IOException{ HttpClient client =null; PostMethod post = null; GetMethod get = null; try{ client = new HttpClient(); client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); post = new PostMethod("http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.16)"); String data = getServerTime(); String nonce = makeNonce(6); NameValuePair[] nvps = 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("vsnf", "1"), new NameValuePair("vsnval", ""), new NameValuePair("su", encodeAccount(username)), new NameValuePair("service", "miniblog"), new NameValuePair("servertime", data), new NameValuePair("nonce", nonce), new NameValuePair("pwencode", "wsse"), new NameValuePair("sp", new SinaSSOEncoder().encode(password, data, nonce)), new NameValuePair("encoding", "UTF-8"), new NameValuePair("returntype", "META"), new NameValuePair( "url", "http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack") }; post.setRequestBody(nvps); client.executeMethod(post); String url = post.getResponseBodyAsString().substring(post.getResponseBodyAsString().indexOf("http://weibo.com/ajaxlogin.php?"),post.getResponseBodyAsString().indexOf("code=0")+6); get = new GetMethod(url); client.executeMethod(get); }catch(IOException e){ e.printStackTrace(); }finally{ get.abort(); post.abort(); } return client.getState().getCookies(); }
其中密码部分进行了加密,加密的算法在网页的js文件里,网上有人把它改成了Java代码。
下面是SinaSSoEncoder类:
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; } }
相关推荐
在本文中,我们将深入探讨如何使用Java来模拟登录新浪微博这一话题。模拟登录是网络爬虫或自动化测试中常见的技术,它允许程序以用户的身份与网站交互。对于Java开发者来说,理解这一过程对于构建自动化工具或者数据...
首先,我们来看`Sina.java`,这是用于模拟登录新浪微博的代码。在新浪微博的模拟登录过程中,主要涉及到以下几个关键步骤: 1. **创建HttpClient实例**:HttpClient是整个模拟登录的核心,通过`HttpClientBuilder`...
在这个场景中,我们关注的是如何使用HTTPClient 4库来模拟登录新浪微博。首先,我们需要理解HTTPClient库的基本概念。 HTTPClient是一个强大的Java库,用于处理HTTP请求和响应。它提供了丰富的功能,包括支持HTTPS...
在本文中,我们将深入探讨如何使用Java来模拟登录新浪微博,特别是在其改版后增加了复杂性的背景下。我们将不依赖新浪提供的官方API,而是通过模拟浏览器的行为,实现自动化登录和交互。 首先,我们需要理解模拟...
2016年4月7最新新浪微博模拟登录HttpClient4.5.2
在本文中,我们将深入探讨如何使用OAuth2协议模拟登录新浪微博,并了解相关技术细节。OAuth2是一种授权框架,允许第三方应用代表用户与服务提供商进行交互,例如发布微博。在这个例子中,我们将使用Java的Apache ...
本主题聚焦于使用Java实现对新浪微博的模拟登录,这对于数据分析、信息抓取或自动化测试等应用场景具有重要意义。 【描述】:“新浪微博模拟登陆源代码,java实现,微博数据抓取” 这段描述揭示了几个关键点: 1....
这个“腾讯新浪微博模拟登录最新源码(java版)”提供了一种使用Java编程语言实现这一功能的方法。下面将详细介绍这个源码可能涉及的关键知识点。 1. **HTTP协议与网络请求**:模拟登录首先需要理解HTTP协议,包括...
通过学习和实践《疯狂java新浪微博代码》,开发者不仅可以掌握Java语言在社交网络开发中的应用,还能深入了解Web服务的开发流程,提高自己的编程技能。同时,这个过程也能为其他类似平台的API集成提供参考和借鉴。
在Java编程环境中,使用POST方法登录新浪微博并保存登录后的网页是一项常见的任务,这涉及到网络请求、数据解析以及文件操作等多个技术领域。以下是一些相关的知识点: 1. **HTTP POST请求**:POST是HTTP协议中的一...
对于Java开发者来说,与新浪微博和QQ这样的社交网络进行交互,可以帮助他们构建各种功能,如分享内容、获取用户信息、实现社交登录等。本篇文章将深入探讨如何在Java项目中使用新浪微博和QQ的API进行开发。 首先,...
1. 模拟登录新浪微博网站,获取登录后才能访问的页面; 2. 解析页面内容,提取关注和粉丝列表的URL链接; 3. 对每个链接发起请求,获取用户的具体信息; 4. 将获取的数据进行清洗和处理,保存到CSV文件中。 **详细...
新浪微博SDK则是针对新浪微博开放平台的API,允许开发者使用C#编写程序来与微博进行交互,如发布、阅读微博,管理用户关注等。 开发C#新浪微博SDK涉及以下核心知识点: 1. **网络通信**:C#中的`HttpClient`类是...
总结来说,Java模拟新浪微博登录抓取数据的过程涉及到网络通信、加密解密、数据解析等多个环节,需要对相关技术有深入理解才能实现。实际应用中,还需要注意处理验证码、会话管理、登录状态保持等问题,以确保完整且...
在.NET环境中调用新浪接口来发表新浪微博是一种常见的社交媒体集成实践。这个过程涉及到API交互、OAuth认证、HTTP请求以及数据序列化等技术。以下是对这一主题的详细解释: 1. **新浪开放平台API**:新浪提供了开放...
本资源“C#百度最新登录源码2015-07-04 添加Rsa加密”是一个特定时期的C#代码示例,旨在帮助开发者实现对百度账号的模拟登录,并且包含了Rsa加密技术的集成,这样就无需依赖JavaScript文件进行加密操作。 首先,让...
本文将围绕"C#新浪微博采集分析平台"这一主题,深入探讨其背后的技术实现与应用价值。 首先,我们来看该平台的核心技术——C#编程语言。C#是由微软公司开发的一种面向对象的编程语言,它具有丰富的类库和强大的性能...
在新浪微博的情况下,由于其安全机制,登录过程可能涉及复杂的身份验证和数据加密。 2. **HTTPClient库**:Java中的HTTPClient是一个强大的库,用于执行HTTP请求。在这个项目中,它被用来与新浪服务器进行通信,...
SinaWeiboCrawler是一款专门针对新浪微博设计的网络爬虫程序,利用Java编程语言开发,能够模拟用户登录行为,绕过API接口的访问限制,直接从网页源代码中抓取信息。这使得它在面对API调用次数受限或接口变动时具有更...
"WebCrawler:网页爬取新浪微博内容" 这个标题明确指出了我们要探讨的主题,即使用WebCrawler技术来抓取新浪微博上的数据。WebCrawler,也称为网络爬虫或网页蜘蛛,是一种自动浏览互联网并抓取网页信息的程序。在这个...