求Java模拟登录139邮箱实例!参见下文!!

jeans_zh 2011-08-01 05:04:56
下文模拟登录失败,不知道错误在哪里?不知道需要什么参数!!望高手指点一二!!~


package com.seed.contacts.email;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.NameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;

import com.seed.contacts.Contact;
import com.seed.contacts.exception.ContactsException;

/**
* 获取139邮箱联系人
* @author jeanx
*
*/
public class OneThreeNineImporter extends EmailImporter {
private String loginUrl = "https://mail.10086.cn/Login/Login.ashx";

public OneThreeNineImporter(String email, String password) {
super(email, password, "GBK");
}

/**
* 模拟登录
*/
protected void doLogin() throws ContactsException {
try {
NameValuePair[] params = {
new NameValuePair("UserName", getUsername(this.email)),
new NameValuePair("Password", this.password),
new NameValuePair("VerifyCode", "") };

String responseStr = doPost(this.loginUrl, params,"http://mail.10086.cn");

String redirectUrl = getHrefUrl(responseStr, "http://");
responseStr = doGet(redirectUrl, this.loginUrl);
} catch (Exception e) {
throw new ContactsException("139 protocol has changed", e);
}
}

/**
* 解析相应页面,获得联系人列表
*/
protected List<Contact> parseContacts() throws ContactsException {
try {
List contacts = new ArrayList();
String sid = getSid();
String randNum = "0.0754233067456439";
String contactsUrl = "http://mail.139.com/addr/apiserver/GetContactsDataByJs.ashx?sid="+ sid + "&rnd=" + randNum;
String content = doGet(contactsUrl);
JSONObject jsonObj = parseJSON(content, "GetUserAddrDataResp=");
JSONArray jsonContacts = jsonObj.getJSONArray("Contacts");
for (int i = 0; i < jsonContacts.length(); i++) {
JSONObject jsonContact = (JSONObject) jsonContacts.get(i);
String username = jsonContact.getString("c");
String email = jsonContact.getString("y");
contacts.add(new Contact(username, email));
}
return contacts;
} catch (Exception e) {
}
throw new ContactsException("139 protocol has changed");
}

/**
* 判断是否为139邮箱
* @param email
* @return
*/
public static boolean is139(String email) {
return email.indexOf("@139.") != -1;
}

/**
* 获得SID
* @return
*/
private String getSid() {
String sid = null;
Cookie[] cookies = this.client.getState().getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("Os_SSo_Sid")) {
sid = cookie.getValue();
break;
}
}
return sid;
}
}
...全文
550 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
桃园闲人 2011-08-02
  • 打赏
  • 举报
回复
139 protocol has changed 协议改变了。。。

看看是不是用的smtp协议????
还有139是否开启了smtp协议。。。。
jeans_zh 2011-08-02
  • 打赏
  • 举报
回复
com.seed.contacts.exception.ContactsException: 139 protocol has changed
at com.seed.contacts.email.EmailImporter.getContacts(EmailImporter.java:70)
at test.Test.main(Test.java:87)
Caused by: com.seed.contacts.exception.ContactsException: 139 protocol has changed
at com.seed.contacts.email.OneThreeNineImporter.doLogin(OneThreeNineImporter.java:41)
at com.seed.contacts.email.EmailImporter.getContacts(EmailImporter.java:65)
... 1 more
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1649)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1206)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:632)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at java.io.FilterOutputStream.flush(FilterOutputStream.java:123)
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at com.seed.contacts.email.EmailImporter.doPost(EmailImporter.java:92)
at com.seed.contacts.email.OneThreeNineImporter.doLogin(OneThreeNineImporter.java:36)
jeans_zh 2011-08-02
  • 打赏
  • 举报
回复
这是在main()方法里面调试的,没有js..
桃园闲人 2011-08-02
  • 打赏
  • 举报
回复
报什么错??如果是js错那就慢慢查吧。。。。
wozaiqingniao 2011-08-02
  • 打赏
  • 举报
回复
OMG!!!
我嘞个去 2011-08-02
  • 打赏
  • 举报
回复
OMG!!!
magong 2011-08-02
  • 打赏
  • 举报
回复
报错在哪边?
页面中是否有些JS需要执行的?(这个最头痛)
Jeanx 2011-08-02
  • 打赏
  • 举报
回复

package com.seed.contacts.email;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.NameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import com.seed.contacts.Contact;
import com.seed.contacts.exception.ContactsException;

/**
* 获取139邮箱联系人
* @author jeanx
*
*/
public class OneThreeNineImporter extends EmailImporter {
private String loginUrl = "https://mail.10086.cn/Login/Login.ashx";

public OneThreeNineImporter(String email, String password) {
super(email, password, "GBK");
}

/**
* 模拟登录
*/
protected void doLogin() throws ContactsException {
try {
//创建一个SSL上下文接受任何证书
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
SSLContext.setDefault(ctx);

NameValuePair[] params = {
new NameValuePair("UserName", getUsername(this.email)),
new NameValuePair("Password", this.password),
new NameValuePair("VerifyCode", "") };

String responseStr = doPost(this.loginUrl, params,"http://mail.10086.cn");

String redirectUrl = getHrefUrl(responseStr, "http://");
responseStr = doGet(redirectUrl, this.loginUrl);
} catch (Exception e) {
throw new ContactsException("139 protocol has changed", e);
}
}

/**
* 解析相应页面,获得联系人列表
*/
protected List<Contact> parseContacts() throws ContactsException {
try {
List contacts = new ArrayList();
String sid = getSid();
String randNum = "0.7155617944761764";
String contactsUrl = "http://g1.mail.10086.cn/addr/apiserver/GetContactsDataNormal.ashx?sid="+ sid + "&rnd=" + randNum;
String content = doGet(contactsUrl);
JSONObject jsonObj = parseJSON(content, "GetUserAddrDataResp=");
JSONArray jsonContacts = jsonObj.getJSONArray("Contacts");
for (int i = 0; i < jsonContacts.length(); i++) {
JSONObject jsonContact = (JSONObject) jsonContacts.get(i);
String username = jsonContact.getString("c");
String email = jsonContact.getString("y");
contacts.add(new Contact(username, email));
}
return contacts;
} catch (Exception e) {
}
throw new ContactsException("139 protocol has changed");
}

/**
* 判断是否为139邮箱
* @param email
* @return
*/
public static boolean is139(String email) {
return email.indexOf("@139.") != -1;
}

/**
* 获得SID
* @return
*/
private String getSid() {
String sid = null;
Cookie[] cookies = this.client.getState().getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("Os_SSo_Sid")) {
sid = cookie.getValue();
break;
}
}
return sid;
}

/**
* 创建一个SSL上下文接受任何证书
* http://stackoverflow.com/questions/1828775/httpclient-and-ssl
* @author jeanx
*
*/
private static class DefaultTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}

}

}



自己解决....

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧