zoukankan      html  css  js  c++  java
  • 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());
            }
        }
    }
  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/person008/p/10980524.html
Copyright © 2011-2022 走看看