java模拟登录获取cookie之后爬取页面

package test;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class test {

    public static void main(String[] args) {
        String data = null;
        // 登陆 Url
        String loginUrl = "https://efmudc.homewell.com.cn/efmweb/login";
        // 需登陆后访问的 Url
        String dataUrl = "https://efmudc.homewell.com.cn/efmweb/getInstantAlarmData";
        HttpClient httpClient = new HttpClient();
 
        // 模拟登陆,按实际服务器端要求选用 Post 或 Get 请求方式
        PostMethod postMethod = new PostMethod(loginUrl);
 
        // 设置登陆时要求的信息,用户名和密码
        NameValuePair[] _data = { new NameValuePair("userName", "sxsyh"), new NameValuePair("password", "j+qVAmMf4ta4laR4dYc4odOHE7N8WY+cbHrD85S3J2ZZT4ddiHGdKoOHWzgGmTQSx/ul2Km2+8Ljz3BCoKihLL42iROyP60McU8qNMLo4IUyJwNyk5vouPe044+MuaYz33raardS14kAkPHE/V5PWrr9qprlTq1N5rqhWRoo1/zOOKaXYSmExo5PKPgEBg0XsWPiqN+eSlN0ulqhmsnSRKpMNy2Iaxh5fZQq3Cw0Xdl5Y2eBW8F0K3maS7V8BtaGe6u6WZRRn9ikYxYokE8F04s+WR4wmse6+le5RILMnoUIx/YIM9fwDPcymuz1FnuEl3SkOoVj+3B9QFD6lnPTGA=="), new NameValuePair("publicKeyVersion", "1"),  new NameValuePair("isSaved", "false") };
        postMethod.setRequestBody(_data);
        try {
            // 设置 HttpClient 接收 Cookie,用与浏览器一样的策略
            httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            int statusCode=httpClient.executeMethod(postMethod);
            // 获得登陆后的 Cookie
            Cookie[] cookies = httpClient.getState().getCookies();
            StringBuffer tmpcookies = new StringBuffer();
            for (Cookie c : cookies) {
                tmpcookies.append(c.toString() + ";");
            }
            if(statusCode==200){//重定向到新的URL
                // 进行登陆后的操作
                GetMethod getMethod = new GetMethod(dataUrl);
                // 每次访问需授权的网址时需带上前面的 cookie 作为通行证
                getMethod.setRequestHeader("cookie", tmpcookies.toString());
                // 你还可以通过 PostMethod/GetMethod 设置更多的请求后数据
                // 例如,referer 从哪里来的,UA 像搜索引擎都会表名自己是谁,无良搜索引擎除外
                postMethod.setRequestHeader("Referer", "http://passport.mop.com/");
                postMethod.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36");
                httpClient.executeMethod(getMethod);
                // 打印出返回数据,检验一下是否成功
                data = getMethod.getResponseBodyAsString();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        
        JSONObject json = JSONObject.parseObject(data);
        List _json = (List)json.get("data");
        for (int i = 0; i < _json.size(); i++) {
            Map _map = (Map)_json.get(i);
            String orgId = String.valueOf(_map.get("orgId"));
            String orgName = String.valueOf(_map.get("orgName"));
            String nodeId = String.valueOf(_map.get("nodeId"));
            String entityId = String.valueOf(_map.get("entityId"));
            String entityName = String.valueOf(_map.get("entityName"));
            String isConfirm = String.valueOf(_map.get("isConfirm"));
            String rows = String.valueOf(_map.get("rows"));
            JSONArray jsonArray = JSONArray.parseArray(rows); 
            String _lastAlarmTime = null;
            String unitName = null;
            String type = null;
            String value = null;
            String sensorNo = null;
            String sensorName = null;
            for (Iterator iterator = jsonArray.iterator();iterator.hasNext();) {
                JSONObject jsonObject = (JSONObject) iterator.next(); 
                unitName = jsonObject.get("unitName").toString();
                type = jsonObject.get("type").toString();
                value = jsonObject.get("value").toString();
                sensorNo = jsonObject.get("sensorNo").toString();
                sensorName = jsonObject.get("sensorName").toString();
                long lastAlarmTime = new Long(_map.get("lastAlarmTime").toString());
                SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//这个是你要转成后的时间的格式
                Date date = new Date(lastAlarmTime * 1000L);
                _lastAlarmTime = sdf.format(date);
            }
            System.out.println("节点ID:"+nodeId+"  单位名称:"+
                               orgName+"  配电柜名称:"+
                               entityName+"  传感器名称:"+
                               sensorName+"  数据:"+
                               value+unitName+"  产生时间:"+
                               _lastAlarmTime);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_25046961/article/details/88641773