zoukankan      html  css  js  c++  java
  • selenium.Cookie 转 okhttp3.Cookie

    package org.rx.util;
    
    import lombok.SneakyThrows;
    import okhttp3.HttpUrl;
    import org.openqa.selenium.Cookie;
    import org.rx.core.NQuery;
    import org.rx.socks.http.HttpClient;
    
    import java.util.Date;
    import java.util.Set;
    
    import static org.rx.core.Contract.require;
    
    public class CookieExtend {
        public static void saveFromResponse(String url, Set<Cookie> cookieSet) {
            require(url, cookieSet);
    
            HttpClient.CookieContainer.getCookieJar().saveFromResponse(HttpUrl.get(url), NQuery.of(cookieSet).select(p -> {
                String domain = p.getDomain();
                if (domain.startsWith(".")) {
                    domain = domain.substring(1);
                }
                okhttp3.Cookie.Builder builder = new okhttp3.Cookie.Builder().name(p.getName()).value(p.getValue())
                        .domain(domain)
                        .path(p.getPath());
                if (p.getExpiry() != null) {
                    builder = builder.expiresAt(p.getExpiry().getTime());
                }
                if (p.isSecure()) {
                    builder = builder.secure();
                }
                if (p.isHttpOnly()) {
                    builder = builder.httpOnly();
                }
                return fill(builder.build(), p.getDomain());
            }).toList());
        }
    
        @SneakyThrows
        private static okhttp3.Cookie fill(okhttp3.Cookie cookie, String domain) {
    //        Field field = Cookie.class.getDeclaredField("domain");
    //        field.setAccessible(true);
    //        field.set(cookie, domain);
            return cookie;
        }
    
        public static Set<org.openqa.selenium.Cookie> loadForRequest(String url) {
            require(url);
    
            return NQuery.of(HttpClient.CookieContainer.getCookieJar().loadForRequest(HttpUrl.get(url)))
                    .select(p -> new org.openqa.selenium.Cookie(p.name(), p.value(), p.domain(), p.path(), new Date(p.expiresAt()), p.secure(), p.httpOnly())).toSet();
        }
    }
    HttpServletRequest request = getCurrentRequest();
    if (request == null) {
    return supplier.invoke(key);
    }
    v = request.getAttribute(k);
    if (v == null) {
    request.setAttribute(k, v = supplier.invoke(k));
    }
  • 相关阅读:
    [转][html5]网页横屏
    [转][EasyUI]扩展 DateBox
    [转][C#]枚举的遍历Enum
    [转][C#]单例模式之懒加载
    [C#][Quartz]添加监听器
    [C#][Quartz]帮助类
    [转]Win 10 的 Win 按键没反应
    转来的--轻松自动化---selenium-webdriver(python) (七)---定位iframe——转来的
    安装charles
    遇到的问题汇总
  • 原文地址:https://www.cnblogs.com/Googler/p/12007916.html
Copyright © 2011-2022 走看看