• driver转httpClient


    主要是driver点击登录后需要转为发包的形式,不然后面点击太多,容易出错

    思路:主要是Cookie的问题,将driver中的Cookie转为HttpClient的Cookie形式

    public static StringBuffer GetCookie(WebDriver driver) {
            // 获得cookie用于发包
            Set<Cookie> cookies = driver.manage().getCookies();
            StringBuffer tmpcookies = new StringBuffer();
            for (Cookie cookie : cookies) {
                tmpcookies.append(cookie.getName() + "=" + cookie.getValue()+ ";");
            }
            return tmpcookies;
     }

    然后将cookie放到header里面

    headers.put("Accept",
                        "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01");
                headers.put("Accept-Encoding", "gzip, deflate, br");
                headers.put("Accept-Language", "zh-CN,zh;q=0.9");
                headers.put("Connection", "Keep-Alive");
                headers.put("Content-Type", "*");
                headers.put("Cookie", buffer.toString());
                headers.put("Host", "shop.10086.cn");
                headers.put("Referer", "https://shop.10086.cn/i/?f=billdetailqry&welcome=" + System.currentTimeMillis());
                headers.put("User-Agent",
                        "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36");
                headers.put("x-requested-with", "XMLHttpRequest");
                // 开始发包
                String rest = httclient.get("https://shop.10086.cn/i/v1/fee/detailbilltempidentjsonp/" + userNumber
                        + "?callback=jQuery031587062895804485_" + System.currentTimeMillis() + "&pwdTempSerCode="
                        + pwdTempSerCode + "&pwdTempRandCode=" + pwdTempRandCode + "&captchaVal=" + catpy + "&_="
                        + System.currentTimeMillis(), headers);

    这里引入一个HttpClient的工具类

    package com.fjdata.util;
    
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpHost;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.commons.httpclient.methods.RequestEntity;
    import org.apache.commons.httpclient.methods.StringRequestEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.ParseException;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.CookieStore;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
    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;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    
    /**
     * 
     * @author 朱洪郑
     * 通用请求类
     * 
     *
     */
    public class SimpleHttpClient {
        private static Logger logger = LoggerFactory.getLogger(SimpleHttpClient.class);
        private static CloseableHttpClient httpClient;
        private static CookieStore cookieStore;
    
        static {
            cookieStore  = new BasicCookieStore();
    
            // 将CookieStore设置到httpClient中
            httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
        }
        
        public static String getCookie(String name){
            List<Cookie> cookies =  cookieStore.getCookies();
            System.out.println(cookies);
            for(Cookie cookie : cookies){
                if(cookie.getName().equalsIgnoreCase(name)){
                    return cookie.getValue();
                }
            }
            return null;
            
        }
    
        /**
         * GET 请求
         * @param url
         * @return
         * @throws ClientProtocolException
         * @throws IOException
         */
        public static String get(String url) throws ClientProtocolException, IOException {
            HttpGet httpGet = new HttpGet(url);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            return EntityUtils.toString(httpResponse.getEntity());
        }
        
        public static String get(String url,Map<String,String> headers) throws ClientProtocolException, IOException {
            HttpGet httpGet = new HttpGet(url);
            for(Map.Entry<String, String> entry : headers.entrySet()){
                httpGet.addHeader(entry.getKey(), entry.getValue());
            }
            HttpResponse httpResponse = httpClient.execute(httpGet);
            return EntityUtils.toString(httpResponse.getEntity());
        }
    
        /**
         * POST 请求
         * @param url
         * @param params
         * @param headers
         * @return
         * @throws ParseException
         * @throws IOException
         */
        public static String post(String url, Map<String, Object> params, Map<String, String> headers){
            String str = "";
            try {
                HttpPost httpPost = new HttpPost(url);
                UrlEncodedFormEntity postEntity = new UrlEncodedFormEntity(getParam(params), "UTF-8");
                httpPost.setEntity(postEntity);
                if(headers != null){
                    addHeaders(httpPost, headers);
                }
                HttpResponse httpResponse = httpClient.execute(httpPost);
    
    
                str =   EntityUtils.toString(httpResponse.getEntity(),"UtF-8");
            } catch (Exception e) {
                logger.error("推送失败,url:"+url,e);
            }
            return str;
        }
    
        /**
         * POST 请求
         * @param url
         * @param
         * @param
         * @return
         * @throws ParseException
         * @throws IOException
         */
        public static String post1(String url, String str, String cookie) throws ParseException, IOException{
    //         PostMethod post = new PostMethod(url);
    //         post.setRequestHeader("Cookie", cok);
    //         String str = "{loginType:'01',memCode:'" + passWordSec + "',isBord:'false',phone:'" + userNumber + "',page:'new',source:'PC',valiCode:'" + imageCode + "'}";
    //         RequestEntity entity = new StringRequestEntity(str, "text/html", "utf-8");
    //         post.setRequestEntity(entity);
    //         httpClient.executeMethod(post);
    //         String result = post.getResponseBodyAsString();
    
            HttpClient httpClient = new HttpClient();
    
            PostMethod post = new PostMethod(url);
            post.setRequestHeader("Cookie", cookie);
            post.setRequestHeader("bfw-ctrl", "json");
            post.setRequestHeader("Connection", "keep-alive");
            post.setRequestHeader("Content-Type", "text/json");
            post.setRequestHeader("Host", "ebsnew.boc.cn");
            post.setRequestHeader("Origin", "https://ebsnew.boc.cn");
            post.setRequestHeader("Referer", "https://ebsnew.boc.cn/boc15/welcome_ele.html?v=20171227064943706&locale=zh&login=card&segment=1");
            post.setRequestHeader("X-Requested-With", "XMLHttpRequest");
            RequestEntity entity = new StringRequestEntity(str, "text/html", "utf-8");
            // List list=new ArrayList<>();
            //list.add(new org.apache.commons.httpclient.NameValuePair("",""),new org.apache.commons.httpclient.NameValuePair("",""));
            post.addParameter("_locale", "zh_CN" );
            post.setRequestEntity(entity);
            httpClient.executeMethod(post);
            String result = post.getResponseBodyAsString();
            return result;
        }
    
        /**
         * 参数
         * @param parameterMap
         * @return
         */
        private static List<NameValuePair> getParam(Map<String, Object> parameterMap) {
            List<NameValuePair> param = new ArrayList<NameValuePair>();
            for(Map.Entry<String, Object> entry : parameterMap.entrySet()){
                param.add(new BasicNameValuePair(entry.getKey(), String.valueOf(entry.getValue())));
            }
            return param;
        }
        
        /**
         * 添加头
         * @param httpRequest
         * @param headerMap
         */
        private static void addHeaders(HttpEntityEnclosingRequestBase httpRequest, Map<String, String> headerMap){
            for(Map.Entry<String, String> entry : headerMap.entrySet()){
                httpRequest.addHeader(entry.getKey(), entry.getValue());
            }
        }
    }
  • 相关阅读:
    R语言 dbWriteTable 写入数据库 为空和乱码问题
    data.table进阶
    简述ODS,和数据仓库做简单的比较
    深入ff and ffbase
    R语言操作mysql上亿数据量(ff包ffbase包和ETLUtils包)
    基于mondrain 的原理纠正特殊指标值
    基于mondrian聚合表的R计算olap开发
    dplyr快速入门
    R中的data.table 快速上手入门
    删除pentaho用户和用户文件夹
  • 原文地址:https://www.cnblogs.com/person008/p/10980524.html
Copyright © 2020-2023  润新知