1、进入笔趣阁的登录网站:https://www.ybdu.com/login.php 登陆前按下F12抓包在Form Data表单中获取登录参数:
username、password、usecookie、action、Submit,如图:
2、我们要获取的个人信息页面地址:https://www.ybdu.com/userdetail.php,如图:
话不多说,下面直接上代码:
package com.java;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/*
* 本程序采用会话保持的方法访问须登录才能查看的页面
* 测试成功时间:2018/6/30
*/
public class LoginDemo {
public void DoIt (String url1,String url2) throws Exception {
BasicCookieStore cookieStore = new BasicCookieStore();
CloseableHttpClient httpclient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
try {
// 模拟用户登录
HttpPost httppost = new HttpPost(url1);// 指向一个没有验证码的登录页面
List<NameValuePair>nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("username", "输入你的账号"));
nvps.add(new BasicNameValuePair("password","输入你的密码"));
nvps.add(new BasicNameValuePair("usecookie", "2592000"));
nvps.add(new BasicNameValuePair("action", "login"));
nvps.add(new BasicNameValuePair("Submit", ""));
httppost.setEntity(new UrlEncodedFormEntity(nvps));
CloseableHttpResponse respLogin = httpclient.execute(httppost);
try {
//打印页面1
HttpEntity entity = respLogin.getEntity();
String str1=EntityUtils.toString(entity,"utf-8");
System.out.println("页面1:"+str1+"\n");
EntityUtils.consume(entity);
System.out.println("Initial set of cookies:");
List<Cookie>cookies = cookieStore.getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
}else {
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString()+"\n");
}
}
}finally {
respLogin.close();
}
// 利用会话保持,继续下一个页面访问
HttpGet httpGetNext = new HttpGet(url2);
CloseableHttpResponse respNext = httpclient.execute(httpGetNext);
try {
System.out.println("Post logon cookies:");
List<Cookie> cookies =cookieStore.getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString()+"\n");
}
}
HttpEntity entityNext = respNext.getEntity();
String str2=EntityUtils.toString(entityNext);
System.out.println("页面2:"+str2);//把结果打印出来看一下
EntityUtils.consume(entityNext);
}finally {
respNext.close();
}
}finally {
httpclient.close();
}
}
public static void main(String [] args) throws Exception{
String url1="https://www.ybdu.com/login.php";//登录页面
String url2="https://www.ybdu.com/userdetail.php";//需要登录才能获取的页面
LoginDemo test=new LoginDemo();
test.DoIt(url1, url2);
}
}
这是获取成功的截图: