`
zhouxianglh
  • 浏览: 267432 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HttpClient 登录163邮箱

阅读更多

之前做过关于邮箱导入好友的操作,用到这个,现在有时间就总结一下。

package com.test;

import java.io.ByteArrayInputStream;
import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.cyberneko.html.parsers.DOMParser;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

/**
 * HttpClient的学习
 */
public class HttpClientTest {
	private HttpClient httpClient;

	public HttpClientTest() {
		httpClient = new HttpClient();
		httpClient.getParams().setParameter("http.protocol.content-charset", "UTF-8");//设置请求编码
	}

	/**
	 * doPost方式访问mail.163.com
	 */
	public String doPostRequest163(String userName, String password) {
		String result = null;
		//loginURL分析mail.163.com页面获得
		String loginUrl = "http://reg.163.com/login.jsp?type=1&url=http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D";
		PostMethod postMethodObj = new PostMethod(loginUrl);
		//post 提交参数params 分析mail.163.com页面获得
		NameValuePair[] params = { new NameValuePair("verifycookie", "1"), new NameValuePair("product", "mail163"), new NameValuePair("username", userName), new NameValuePair("password", password), new NameValuePair("selType", "jy") };//极速版
		try {
			postMethodObj.setRequestBody(params);
			httpClient.executeMethod(postMethodObj);
			result = postMethodObj.getResponseBodyAsString();
			System.out.println("com.test.HttpClientTest.doPostRequest163请求" + loginUrl + "页面:\n" + result);//登录成功
			//跳转页面,分析跳转页面获取如下URL,此外,注意doGetRequer163,doPostRequest163共用HttpClient
			result = doGetRequer163("http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=&username=" + userName);
			//到此为止完全进入邮箱
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			postMethodObj.releaseConnection();//关闭请求
		}
		return result;
	}

	/**
	 * doGet方式访问mail.163.com
	 */
	public String doGetRequer163(String loginUrl) {
		String result = null;
		if (null == loginUrl) {//默认访问http://mail.163.com
			loginUrl = "http://mail.163.com";
		}
		GetMethod getMethodObj = new GetMethod(loginUrl);//设置请求链接
		try {
			httpClient.executeMethod(getMethodObj);//请求链接
			result = getMethodObj.getResponseBodyAsString();//获取响应内容
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			getMethodObj.releaseConnection();//关闭请求
		}
		System.out.println("com.test.HttpClientTest.doGetRequer163请求" + loginUrl + "页面:\n" + result);
		return result;
	}

	/**
	 * HTML 内容的解析
	 * 
	 * @param pageContent
	 */
	public void parseHTML(String pageContent) {
		DOMParser parser = new DOMParser();
		try {
			InputSource is = new InputSource(new ByteArrayInputStream(pageContent.getBytes("GBK")));
			parser.parse(is);
			NodeList nodeList = parser.getDocument().getElementsByTagName("input");
			for (int i = 0, j = nodeList.getLength(); i < j; i++) {
				Node node = nodeList.item(i);
				System.out.println(node.getNodeName() + "\t" + node.getAttributes().getNamedItem("name") + "\t" + node.getAttributes().getNamedItem("value"));
			}
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		/**
		 * 邮箱登录过程
		 * 1 登录mail.163.com
		 * 2 post 提交用户名密码
		 * 3 跳转链接
		 * OK
		 */
		HttpClientTest httpClientTest = new HttpClientTest();
		String pageContent = httpClientTest.doGetRequer163(null);
		httpClientTest.parseHTML(pageContent);//访问mail.163.com
		httpClientTest.doPostRequest163("zhouxianglh", "密码不能告诉你");//登录
	}
}

 

commons-httpclient-3.2.jar  httpClient jar相关

nekohtml.jar   解析html相关

顺便上传方便下载


  • jar.zip (411.5 KB)
  • 下载次数: 158
分享到:
评论
3 楼 zhouxianglh 2012-04-28  
chanllen 写道
楼主,此代码在我机子上运行有误啊
parser.parse(is);
NodeList nodeList = parser.getDocument().getElementsByTagName("input");
这两句有问题~

哦?报什么错?
2 楼 chanllen 2012-03-18  
楼主,此代码在我机子上运行有误啊
parser.parse(is);
NodeList nodeList = parser.getDocument().getElementsByTagName("input");
这两句有问题~
1 楼 xiangfei209 2011-04-19  
楼主你这个能跳到登录163主页吗

相关推荐

    C#读取网页验证码 (读取163邮箱)

    首先,我们需要导入`System.Net.Http`命名空间,创建一个HttpClient实例,并使用其GetAsync方法来请求163邮箱的验证码页面。例如: ```csharp using System.Net.Http; using System.Threading.Tasks; public async...

    java开发实现163邮件发送(支持附件

    在Java开发中,实现163邮箱发送功能是一项常见的任务,尤其当需要自动化监控系统运行状态并及时报告异常时。163邮箱提供了一个SMTP(Simple Mail Transfer Protocol)服务,允许开发者通过编程方式发送电子邮件,...

    C# 利用POST传值方式一键登录126邮箱源码

    请注意,实际的登录过程可能会涉及更复杂的步骤,如处理Cookie以维持会话,或者使用HttpClient类(在.NET Framework 4.5及以上版本可用)以简化请求操作。此外,为了安全起见,用户凭据不应硬编码在源码中,而应从...

    通过代码获取邮箱联系人(126、163)

    本项目专注于通过代码方式获取126和163邮箱的联系人列表,这通常涉及到邮件服务API的调用和身份验证。下面将详细阐述实现这一功能的关键知识点。 1. **邮箱API接口**: - 126和163邮箱由网易公司提供,它们提供了...

    C#读取网页验证码的示例 (读取163邮箱)

    本文将深入探讨如何使用C#语言来读取网页上的验证码,特别是针对163邮箱的验证码。我们将讲解相关的编程概念、技术及步骤,以便开发者能够构建自己的验证码读取解决方案。 首先,要理解C#读取网页验证码的基本流程...

    获取yahoo,sina,tom,gmail,163等邮箱通信录

    5. **163**:网易163邮箱提供了POP3/IMAP协议和SMTP协议,虽然不直接提供获取通信录的API,但可以通过IMAP协议读取存放在邮箱中的通讯录文件。 在ASP.NET C#中实现上述功能,你需要以下步骤: 1. **设置开发环境**...

    c#实现的邮箱登陆器

    【C#实现的邮箱登陆器】是一个基于C#编程语言开发的应用程序,旨在帮助用户登录并管理163邮箱。这个项目对于初学者来说是一个很好的实践案例,因为它涉及到网络通信、用户界面设计以及数据验证等多个关键知识点。让...

    邮箱通讯录获取asp.net

    本项目以"邮箱通讯录获取asp.net"为标题,表明我们将探讨如何在ASP.NET平台上实现从Gmail、MSN、163和Yahoo!等主流邮箱服务中获取用户通讯录的功能。下面将详细讲解这个过程涉及的关键知识点。 1. **OAuth认证**:...

    下载QQ邮件附件并将其标为已读C#源码

    - QQ邮箱的API限制可能会影响到其他邮箱,如SINA和163,因此在编写代码时需要考虑兼容性。 综上所述,实现下载QQ邮件附件并将其标为已读的C#源码,主要涉及QQ邮箱API的使用,OAuth2.0授权,HTTP请求的发送,JSON...

    TAC接口文档10-30+函数使用1

    接口的请求地址中包含了IP地址,例如172.50.163.162和123.207.96.94,这表明服务端的API部署在这些IP对应的服务器上。 8. **数据安全** 虽然示例代码没有详细讨论,但在实际应用中,密码通常需要进行加密处理,以...

    C# 文件下载写入临时文件带进度条的哦

    在C#编程中,文件下载是一项常见的任务,特别是在Web应用中。...以下是实现这一功能的关键知识点: 1. **文件下载**: 在C#中,我们通常使用`...如果有任何改进意见或问题,可以联系邮箱:aiouluosi.cool@163.com。

Global site tag (gtag.js) - Google Analytics