package com.ljl.org.httpclient.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.httpclient.Header;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
@SuppressWarnings("serial")
public class SimulationLoginServlet extends HttpServlet {
// 指定的URL
private static String redirectURL = "http://hi.baidu.com/";
// 登录的URL
private static String loginURL = "https://passport.baidu.com/?login";
// 创建一个DefautlHttpClient对象
private static final DefaultHttpClient defaultHttpclient = new DefaultHttpClient();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
private static HttpResponse response;
private static String username = "";
private static String pwd = "";
private static HttpServletRequest req;
private static HttpServletResponse resp;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
username = request.getParameter("userName");
pwd = request.getParameter("pwd");
SimulationLoginServlet.printText();
req.getRequestDispatcher("/index.jsp").forward(req, resp);
out.flush();
out.close();
}
/**
* 定义一个登录的方法
*
* @throws IOException
* @throws ServletException
*/
private static boolean Login() throws ServletException, IOException {
// 创建一个HttpPost对象
HttpPost httppost = new HttpPost(loginURL);
List<NameValuePair> nvp = new ArrayList<NameValuePair>();
nvp.add(new BasicNameValuePair("origURL", redirectURL));
nvp.add(new BasicNameValuePair("domain", "baidu.com"));
nvp.add(new BasicNameValuePair("isplogin", "true"));
nvp.add(new BasicNameValuePair("formName", " "));
nvp.add(new BasicNameValuePair("method", ""));
nvp.add(new BasicNameValuePair("submit", "登录"));
nvp.add(new BasicNameValuePair("email", username));
nvp.add(new BasicNameValuePair("password", pwd));
try {
httppost.setEntity(new UrlEncodedFormEntity(nvp, HTTP.UTF_8));
try {
response = defaultHttpclient.execute(httppost);
System.out.println("相应状态:" + response.getStatusLine());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
// req.getRequestDispatcher("/error.jsp").forward(req, resp);
return false;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// /req.getRequestDispatcher("/index.jsp").forward(req, resp);
return true;
}
/**
* 得到本地的定向
*
* @return
*/
private static String getRedirectLocation() {
Header locationHeader = (Header) response.getFirstHeader("Location");
if (locationHeader == null) {
return null;
}
return locationHeader.getValue();
}
/**
* 得到文本
*
* @param redirectLocation
* @return
*/
private static String getText(String redirectLocation) {
HttpGet httpget = new HttpGet(redirectLocation);
// Create a response handler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = "";
try {
responseBody = defaultHttpclient.execute(httpget, responseHandler);
} catch (Exception e) {
e.printStackTrace();
responseBody = null;
} finally {
httpget.abort();
defaultHttpclient.getConnectionManager().shutdown();
}
return responseBody;
}
/**
* 打印文本
*
* @throws IOException
* @throws ServletException
*/
public static void printText() throws ServletException, IOException {
if (Login()) {
String redirectLocation = getRedirectLocation();
if (redirectLocation != null) {
System.out.println(getText(redirectLocation));
}
}
}
}