这里是一一个向163取得特定邮箱的通讯录列表的联系人的JAVA程序,经过 检验,现在能够正确登录到163系统里面(用户名,密码)都正确的话,但现在遇到 了一个问题,久久不能解决 :
在登录到了163之后,
用下面的URL 得到 通讯录的页面,但就是不能进去,原因是这个里面的sid不知怎样得来,在做126的时候,这个sid是从cookies取得的
HttpGet httpget = new HttpGet("http://g2a10.mail.163.com/coremail/fcg/ldvcapp?funcid=prtsearchres&sid="+sid+"&listnum=20&tempname=address%2faddress.htm";
SID:
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None";
} else {
for (int i = 0; i < cookies.size(); i++)
{
if("NTES_SESS".equals(cookies.get(i).getName())) {
System.out.println(cookies.get(i).getName()+"= " + cookies.get(i).getValue());
String temp=cookies.get(i).getValue();
//sid=temp.substring(temp.indexOf("%"+1,temp.length());
sid = temp;
}
}
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString());
}
}
但不问题就在于不知怎样截取这个temp ?而126的temp是 xxxxx%xxxxxxxxx以“%”库分隔符的,这样截取“%” 后面的为sid就行,
Coremail- WaagMaTaMrwaa%DAvqcKmmrwfnwflEoRmmaEqyUAIirYwM
像上面青色所示,我把sid=“青色“再传送到url就可得到通讯录的页面了。。呵呵而163的则不是: NTES_SESS= 20w_MHQdAnGQeMer9YWUpl_I.mVznqftArn.cmm3F9AIB2k6ZBVkwedgU_1ne92FW7rr0ZG664LSHU2Mw8pqEDiJB
NETEASE_SSN= yourname
NETEASE_ADV= 10&20&1210502832071
URSJESSIONID= aZfawMJBx_Hd
像上面所示的结果,应该怎样处理,高手在吗,难道是思路错误,还是其它原因????高手来看看啦
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.UrlEncodedFormEntity;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.protocol.HttpContext;
/**
* A example that demonstrates how HttpClient APIs can be used to perform
* form-based logon.
*/
public class client163tFormLogin1 { public static void main(String[] args) throws Exception { DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(
ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
HttpPost httpost = new HttpPost("https://reg.163.com/logins.jsp?type=1&url=http://fm163.163.com/coremail/fcg/ntesdoor2?" +
"lightweight=1&" +
"verifycookie=1&" +
"language=-1&" +
"style=16"
);
NameValuePair[] nvps = new NameValuePair[] {
new BasicNameValuePair("username", "yourname",
new BasicNameValuePair("password", "yourpassword",
new BasicNameValuePair("product", "mail163",
new BasicNameValuePair("selType", "jy"
};
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_);
System.out.println(new java.util.Date());
HttpResponse response = httpclient.execute(httpost);
HttpEntity entity = response.getEntity();
System.out.println("Login form get: " + response.getStatusLine());
//java.io.FileOutputStream htmlOutStream=new java.io.FileOutputStream("c:\\1.html";
//entity.writeTo(htmlOutStream);
//htmlOutStream.close();
if (entity != null) {
entity.consumeContent();
}
String sid="";
System.out.println("ost logon cookies:";
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None";
} else {
for (int i = 0; i < cookies.size(); i++)
{
if("NTES_SESS".equals(cookies.get(i).getName())) {
System.out.println(cookies.get(i).getName()+"= " + cookies.get(i).getValue());
String temp=cookies.get(i).getValue();
//sid=temp.substring(temp.indexOf("%")+1,temp.length());
sid = temp;
}
}
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString());
}
}
System.out.println("sid------------" + sid);
HttpGet httpget = new HttpGet("http://g2a10.mail.163.com/coremail/fcg/ldvcapp?funcid=prtsearchres&sid="+sid+"&listnum=20&tempname=address%2faddress.htm");
String name="",email="";
Pattern pLinePattern;
Matcher pLineMatcher;
System.out.println("Login form get: " + response.getStatusLine());
BufferedReader bufferReader=new BufferedReader(new InputStreamReader(entity.getContent()));
String lineString=bufferReader.readLine();
while(lineString!=null)
{
System.out.println(lineString);
int i = 1;
pLinePattern=Pattern.compile("<td align=left nowrap><!-- 修改 -->(.*)|<td align=left nowrap><!-- 发信 -->(.*)</a></td>");
pLineMatcher=pLinePattern.matcher(lineString);
while(pLineMatcher.find())
{
String pMatchString=pLineMatcher.group(1);
if(pMatchString!=null && !pMatchString.equals(""))
name=pMatchString;
pMatchString=pLineMatcher.group(2);
if(pMatchString!=null && !pMatchString.equals(""))
email=pMatchString;
}
if(!email.equals("") && !name.equals(""))
{
System.out.println(name+"----"+email);
email=name="";
}
lineString=bufferReader.readLine();
}
System.out.println(new java.util.Date());
}
在登录到了163之后,
用下面的URL 得到 通讯录的页面,但就是不能进去,原因是这个里面的sid不知怎样得来,在做126的时候,这个sid是从cookies取得的
HttpGet httpget = new HttpGet("http://g2a10.mail.163.com/coremail/fcg/ldvcapp?funcid=prtsearchres&sid="+sid+"&listnum=20&tempname=address%2faddress.htm";
SID:
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None";
} else {
for (int i = 0; i < cookies.size(); i++)
{
if("NTES_SESS".equals(cookies.get(i).getName())) {
System.out.println(cookies.get(i).getName()+"= " + cookies.get(i).getValue());
String temp=cookies.get(i).getValue();
//sid=temp.substring(temp.indexOf("%"+1,temp.length());
sid = temp;
}
}
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString());
}
}
但不问题就在于不知怎样截取这个temp ?而126的temp是 xxxxx%xxxxxxxxx以“%”库分隔符的,这样截取“%” 后面的为sid就行,
Coremail- WaagMaTaMrwaa%DAvqcKmmrwfnwflEoRmmaEqyUAIirYwM
像上面青色所示,我把sid=“青色“再传送到url就可得到通讯录的页面了。。呵呵而163的则不是: NTES_SESS= 20w_MHQdAnGQeMer9YWUpl_I.mVznqftArn.cmm3F9AIB2k6ZBVkwedgU_1ne92FW7rr0ZG664LSHU2Mw8pqEDiJB
NETEASE_SSN= yourname
NETEASE_ADV= 10&20&1210502832071
URSJESSIONID= aZfawMJBx_Hd
像上面所示的结果,应该怎样处理,高手在吗,难道是思路错误,还是其它原因????高手来看看啦
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.UrlEncodedFormEntity;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.protocol.HttpContext;
/**
* A example that demonstrates how HttpClient APIs can be used to perform
* form-based logon.
*/
public class client163tFormLogin1 { public static void main(String[] args) throws Exception { DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(
ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
HttpPost httpost = new HttpPost("https://reg.163.com/logins.jsp?type=1&url=http://fm163.163.com/coremail/fcg/ntesdoor2?" +
"lightweight=1&" +
"verifycookie=1&" +
"language=-1&" +
"style=16"
);
NameValuePair[] nvps = new NameValuePair[] {
new BasicNameValuePair("username", "yourname",
new BasicNameValuePair("password", "yourpassword",
new BasicNameValuePair("product", "mail163",
new BasicNameValuePair("selType", "jy"
};
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_);
System.out.println(new java.util.Date());
HttpResponse response = httpclient.execute(httpost);
HttpEntity entity = response.getEntity();
System.out.println("Login form get: " + response.getStatusLine());
//java.io.FileOutputStream htmlOutStream=new java.io.FileOutputStream("c:\\1.html";
//entity.writeTo(htmlOutStream);
//htmlOutStream.close();
if (entity != null) {
entity.consumeContent();
}
String sid="";
System.out.println("ost logon cookies:";
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None";
} else {
for (int i = 0; i < cookies.size(); i++)
{
if("NTES_SESS".equals(cookies.get(i).getName())) {
System.out.println(cookies.get(i).getName()+"= " + cookies.get(i).getValue());
String temp=cookies.get(i).getValue();
//sid=temp.substring(temp.indexOf("%")+1,temp.length());
sid = temp;
}
}
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString());
}
}
System.out.println("sid------------" + sid);
HttpGet httpget = new HttpGet("http://g2a10.mail.163.com/coremail/fcg/ldvcapp?funcid=prtsearchres&sid="+sid+"&listnum=20&tempname=address%2faddress.htm");
String name="",email="";
Pattern pLinePattern;
Matcher pLineMatcher;
System.out.println("Login form get: " + response.getStatusLine());
BufferedReader bufferReader=new BufferedReader(new InputStreamReader(entity.getContent()));
String lineString=bufferReader.readLine();
while(lineString!=null)
{
System.out.println(lineString);
int i = 1;
pLinePattern=Pattern.compile("<td align=left nowrap><!-- 修改 -->(.*)|<td align=left nowrap><!-- 发信 -->(.*)</a></td>");
pLineMatcher=pLinePattern.matcher(lineString);
while(pLineMatcher.find())
{
String pMatchString=pLineMatcher.group(1);
if(pMatchString!=null && !pMatchString.equals(""))
name=pMatchString;
pMatchString=pLineMatcher.group(2);
if(pMatchString!=null && !pMatchString.equals(""))
email=pMatchString;
}
if(!email.equals("") && !name.equals(""))
{
System.out.println(name+"----"+email);
email=name="";
}
lineString=bufferReader.readLine();
}
System.out.println(new java.util.Date());
}
解决方案 »
- No report config file!错误了 ,怎么办啊 !!!!急急急急!!!!
- 求助下,用httpxml发消息,直接写个main函数测试可以发送,用程序触发就有问题
- 怎样才能学好struts啊!
- 大家都来看看哦!!!
- 这个异常自己真不知道该怎么决绝了
- 如何获取一个不再工程中的代码文件的所有函数或者方法。
- 我自己做个一个JAVA网上考试系统的后台,
- 用jdbc删除记录后(commit了),在ejb(cmp)中插入记录报主键存在错,难道两者不能混用?
- 请高手看看我现在到底是什么水平。
- 请问哪里有SWT开发工具包下载,谢了
- struts2 java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap
- JAVA线程控制超时问题
再發一次httpost
url是:
http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight=1&username=****
然後再讀取cookie中Coremail的值就是了!!
这个好像会变的。。我做的已经到了收件箱的页面,但是它是一个框架,不晓得怎么取真正的BODY值了