首页 > 经验 > 关键词  > Java最新资讯  > 正文

Java实现网易163邮箱好友通讯录的解析功能(带源码)

2012-05-24 11:44 · 稿源:ij2ee.com

这个源码我之前开源过,昨晚又做了一下。公开源码。这里讲下思路以及真实源码实现。我们将使用1个类HttpClient,这个类的基本用法可以参照:

https://www.ibm.com/developerworks/cn/opensource/os-httpclient/

我们会使用httpClient以及Httpwatch工具。

正式开始:

首先,我们用我们的账户密码登录,这里是thieftest 密码a123456 为了他人方便,请不要修改密码

为了更快的找到对应的请求地址,我们直接搜索我们的用户名

我们获取了 https://ssl.mail.163.com/entry/coremail/fcg/ntesdoor2?df=webmail163&from=web&funcid=loginone&iframe=1&language=-1&net=t&passtype=1&product=mail163&race=234_62_188_db&style=-1&uid=thieftest@163.com

这么一串字符串 ,我们可以看到它是一个POST请求,所以我们需要用httpclient的POST请求来请求服务器。

下面是POST和GET请求的核心代码,

public static String doGet(<span class="wp_keywordlink_affiliate"><a href="https://www.ij2ee.com/tag/httpclient" title="查看 HttpClient 中的全部文章" target="_blank">HttpClient</a></span> client, String url, String charCode)
throws URISyntaxException, IllegalStateException, IOException,
HttpException, InterruptedException {
HttpGet get = new HttpGet(url);
return StringUtil.readInputStream(client.execute(get).getEntity()
.getContent(), charCode);
}
public static String doPost(<span class="wp_keywordlink_affiliate"><a href="https://www.ij2ee.com/tag/httpclient" title="查看 HttpClient 中的全部文章" target="_blank">HttpClient</a></span> client, String url,
Map<String, String> param, String charCode)
throws URISyntaxException, IllegalStateException, IOException,
HttpException, InterruptedException {
NameValuePair nvps[] = new BasicNameValuePair[param.size()];
int i = 0;
for (Map.Entry<String, String> entry : param.entrySet()) {
NameValuePair nvp = new BasicNameValuePair(entry.getKey(), entry
.getValue());
nvps[i++] = nvp;
}
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(nvps, charCode));
HttpResponse response = client.execute(httpPost);
if(response.getStatusLine().getStatusCode()!=200){
throw new RuntimeException("网页抓取失败,HTTP CODE:"+response.getStatusLine().getStatusCode());
}
InputStream is = response.getEntity().getContent();
return StringUtil.readInputStream(is, charCode);
}

根据返回的信息我们分析成功与否,判断的方式就是看有没得到一个叫sid的参数

返回成功的话 会在消息里有 index?sid=xxxxxxxxx 这一段。 这里的xxxxxxx是至关重要的,我们需要获取他。 这里我们可以使用正则表达式。来获取 大概代码如下:

private static String regex = "iframe src=\"index.jsp\\?sid=([^\"]+)";
public static String getByRegex(String regex, int index, String txt) {
Pattern p = Pattern.compile(regex,Pattern.DOTALL);
Matcher m = p.matcher(txt);
if (m.find()) {
return m.group(index);
}
return null;
}

点通讯后 我们抓包发现了一个URL 貌似记录都在里面。

是JSON的撒。要是数据多了 我们可以在www.bejson.com 上查看目录结构

但是我们请求这个URL后 发现它就返回了

<?xml version="1.0" encoding="UTF-8" ?>
<result>
<code>S_OK</code>
</result>

看来这条路不通啊。继续找把。忽然发现还有打印的操作能得到所有的我们想要的资料。

String getUsers="https://tg4a84.mail.163.com/jy3/address/addrprint.jsp?sid=前面获取的ID";

请求后得到如下内容

<div class="ContentWp add_print2">
<div class="ContentThemeWp">
<table width="100%" height="35px" border="0" cellpadding="0" cellspacing="0" bgcolor="f0f9fc">
<tr>
<td width="88%"><b>&nbsp;&nbsp;&nbsp;&nbsp;<span style=" font-size:16px">选择打印的项目</span></b>&nbsp;<input type="checkbox" name="phone" value="phone" onclick="fAddressPrintShow(this)">电话/即时通讯ID<input type="checkbox" name="home" value="home" onclick="fAddressPrintShow(this)">家庭资料<input type="checkbox" name="company" value="company" onclick="fAddressPrintShow(this)">单位/公司<input type="checkbox" name="other" value="other" onclick="fAddressPrintShow(this)">其他信息</span></td>
<td width="12%"><div align="center"><span style="background-color:#f0f9fc; height:35px; padding-top:8px"><input name="button" type="button" class="Btn BtnNml ImpBtn" onMouseOver="this.className='Btn BtnHv ImpBtn'" onMouseOut="this.className='Btn BtnNml ImpBtn'" onMouseDown="this.className='Btn BtnHv BtnDw ImpBtn'" hidefocus="ture" value="打 印" style=" margin-bottom:8px" onclick="window.print();"/></span></div></td>
</tr>
</table>
<div class="Hr"><hr/>
</div><div class="gTitleSub"><div align="left"><b class="mTT">三少</b></div><div class="Extra"></div></div>
<table class="gTable"><tr id="tr_base_0" style=""><th>邮件地址:</th><td>ij2ee@139.com</td></tr><tr id="tr_base_0" style=""><th>移动电话:</th><td></td></tr><tr id="tr_base_0" style=""><th>生日:</th><td></td></tr><tr id="tr_home_2" style="display:none"><th>联系地址:</th><td>China 中国</td></tr><tr id="tr_company_3" style="display:none"><th>公司地址:</th><td>;;;;;;CI</td></tr><tr id="tr_other_4" style="display:none"><th>备注:</th><td>Java技术博客 www.ij2ee.com</td></tr>
</table>
<div class="Hr"><hr /></div><div class="gTitle"><div align="center"><span style="color:#999;">网易公司版权所有</span></div></div>
</div>
</div>

下面就剩下解析了。

具体的看源代码。

源码下载:https://115.com/file/bejbru4y#thief.rar 包含源码及jar包 下下来就可以跑,在test包里有测试用例

本文来源:https://www.ij2ee.com/49657.html

  • 相关推荐
  • 大家在看
  • Linux 5.16-rc1发布:带来Intel AMX、FUTEX2、Folios等改进

    Linus Torvalds 刚刚宣布了 Linux 5.16-rc1,可知在跨过了本次激动人心的合并窗口之后,贡献者们为新版 Linux 修复了大量内核错误。新功能方面,Linux 5.16 包含了正在合并的 Memory Folios 方案、DAMON 内存回收、各种文件系统改进。(来自:Kernel.org)另有英特尔 Alder Lake-S 核显 / AMD 新硬件、任天堂 Switch 控制器、KVM 虚拟机管理程序的 RISC-V 支持,以及 Apple Silicon 平台启动改进、Intel AMX 支持、集群调度、FUTEX

  • Linux Kernel 5.16将为树莓派Compute Module 4提供mainline支持

    即将到来的 Linux Kernel 5.16 引入了大量令人兴奋的新功能和改进,其中最值得关注的就是对树莓派 Compute Module 4 的 mainline 支持。树莓派 Compute Module 是专为工业和商业场景应用而设计的,范围包括瘦客户机和数字标牌解决方案等。Compute Module 4 和树莓派一样由 BCM2711 供电,并建立在早期版本的成功基础上。Compute Module 4 还引入了一个新的外形尺寸,从而使模块的占地面积更小。在最近的 Arm 平台/SoC 变化中,增加

  • Intel 13代酷睿明年Q3见:最多8大16小24核心

    Alder Lake 12代酷睿已经开始登场,Raptor Lake 13代酷睿还会远吗?根据爆料高手@momomo_us的最新说法,Intel 13代酷睿将在明年第三季度发布,距离12代还不到一年,迭代节奏明显加快。按照目前已知,13代酷睿会继续使用Intel 7工艺(10mm加强版),延续并强化混合架构设计,其中P核(大核)采用新的Raptor Cove架构,最多还是8个并支持超线程,E核(小核)则是加强版的Gracemont,最多翻番到16个但依然不支持超线程。这一代将有三个不同?

  • Btrfs文件系统在Linux 5.16中得到了更多的性能优化

    Btrfs文件系统的开发团队继续稳步推进其性能优化和其他工作,部分原因是Fedora工作站继续默认使用该文件系统,以及openSUSE和其他Linux发行版对其重新感兴趣。在Linux5.16合并窗口最繁忙的第一天,Btrfs的修改由SUSE的maitainer David Sterba提交。本次升级最大的变化是性能改进和一些新的功能开始工作,以及通常的各种修复和代码维护。新内核的Btrfs继续带来了各种性能优化。在Dbench工作负载的样本上,日志的改进产生3%的吞吐量?

  • 巴基斯坦显卡销售乱象:RX 480翻新卖3746元 GTX 1660 Ti卖5432元

    伴随着挖矿、全球半导体短缺等因素影响,全球 GPU 市场都呈现供不应求的状态,而其中更是出现了诸多销售乱象。这种情况在巴基斯坦等南亚国家尤为明显,官方分销商和零售商的做法更是让事情变得更糟。目前,华硕在巴基斯坦市场的主要分销商对 GPU 设定了疯狂的建议零售价,其他官方分销商则以按比例的价格销售已上市 4 年的翻新 GPU。GPU 在每个地区的价格都不是很好,但南亚和中东地区更明显。不仅仅是零售商,官方分销商也在使用?

  • 任天堂Switch、索尼PS5手柄驱动等HID更新已经抵达Linux 5.16

    HID子系统的更新已经被送入正在进行的Linux5.16合并窗口,对Linux游戏玩家来说会有一些明显的改进。最令人兴奋的消息是任天堂Switch手柄驱动终于出现了!这个内核驱动可以让任天堂Switch的用户能够与主线内核一起工作,并且无论是USB有线和蓝牙连接下都被支持,像触感震动模式、LED和其他功能都可以正常工作。需要注意的是,这个开源的任天堂Switch手柄驱动程序不是来自任天堂,而是通过逆向工程的自由软件社区。同时,索尼官方对?

  • 采用AVS标准的奥林匹克频道CCTV16开播

    10月25日16:00,中央广播电视总台奥林匹克频道及数字平台在北京开播上线。这是中国大陆地区唯一得到国际奥委会授权使用奥林匹克名称和五环标识的传播平台。电视频道对外呼号CCTV16,是国际首个以4K超高清标准24小时上星同步播出的专业体育频道。同时,数字平台将覆盖PC端、APP端、H5以及微信、微博新媒体平台。CCTV16的正式上线,将为不久后开启的2022北京冬奥会形成全面助力,冬奥赛事转播及相关节目都将由奥运频道承接。当然奥运

  • RTX 3070 Ti 16GB/3080 12GB显卡来了:曝下月发布

    NVIDIA已经有很长一段时间没有更新游戏显卡了,一份最近的情报称,有三款显卡酝酿发布上市。首先是RTX 2060 12GB,预计12月7日直接上架开卖。接着是RTX 3070 Ti 16GB和RTX 3080 12GB,12月17日纸面发布,明年1月11日正式开卖。就掌握的消息来看,三款显卡有且仅有显存容量发生变化,CUDA数量则保持不变。虽然显存容量增大基本不会出现性能质变,但对于高分辨率游戏而言,帧数也会有所提升。至于价格,目前的行情仍不乐观,尽管是三

  • RTX 2060 12GB/RTX 3070Ti 16GB/RTX 3080 12GB三款显卡下月发布

    NVIDIA 准备在下个月推出三款新的 GeForce RTX 30 和 RTX 20 系列显卡,即 RTX 3070 Ti 16 GB、RTX 3080 12 GB 和 RTX 2060 12 GB。该消息来自于Twitter网友@hongxing2020,他表示这三款新显卡会在 2022 年年初上市发售。他表示 NVIDIA 将会在 12 月 17 日发布 GeForce RTX 3080 12 GB 和 RTX 3070 Ti 16 GB 显卡,而GeForce RTX 2060 12 GB 将在 12 月 7 日发布和上市。GeForce RTX 30系列产品将于 1 月中旬(11日)在零售店上架?

  • ARGB灯效 德商必酷be quiet!发布Light Wings静音风扇

    2011 年 11 月 10 日,来自德国的高端PC配件制造商德商必酷(be quiet!),刚刚发布了全新Light Wings系列风扇,这也是德商必酷(be quiet!)第一款带有ARGB灯效的风扇产品。除此以外,研发重点还专注于性能、低噪音运行以及be quiet!一贯的高品质。Light Wings系列风扇支持PWM调速,风扇正面有一个LED灯环,反面还单独配备了另一个稍窄些的LED灯环,形成双灯环配置,并且提供120mm和140mm两种尺寸可供选择。动态灯效Light Wings的

这篇文章对你有价值吗?

  • 热门标签

热文

  • 3 天
  • 7天