[JAVA] Insérez le cookie sélénium dans le client okHttp3

Prenez un cookie du webdriver sélénium (identique au séléniure) et branchez-le dans le client okhttp

Comme le type est différent, j'ai dû le remettre. Je pensais pouvoir faire mieux, mais j'ai abandonné. Voici un exemple de téléchargement d'URL

    private void downloadFileSync(final String downloadUrl, String orgFilename) throws Exception {
        List<Cookie> cookies = new ArrayList();
        String domain = "example.com";// .Une exception concerne les domaines commençant par k..getDomain()Après avoir pris.Ou précisez directement
        val cc = new Cookie.Builder();
        for (org.openqa.selenium.Cookie k : getWebDriver().manage().getCookies()) {
            cc.domain(domain).name(k.getName()).path(k.getPath()).value(k.getValue());
            if (k.isSecure()) { cc.secure(); }
            if (k.isHttpOnly()) { cc.httpOnly(); }
            if (k.getExpiry() != null) { cc.expiresAt(k.getExpiry().getTime()); }
            cookies.add(cc.build());
        }
        CookieManager cookieManager = new CookieManager(null, ACCEPT_ALL);
        CookieHandler.setDefault(cookieManager);
        JavaNetCookieJar cookieJar = new JavaNetCookieJar(cookieManager);
        cookieJar.saveFromResponse(HttpUrl.parse(downloadUrl), cookies);
        OkHttpClient client = new OkHttpClient().newBuilder().cookieJar(cookieJar).build();

        String filename = orgFilename + ".jpg ";
        log.info("download filename : {}", filename);
        Request request = new Request.Builder().url(downloadUrl).build();
        Response response = client.newCall(request).execute();
        if (!response.isSuccessful()) {
            throw new IOException("Failed to download file: " + response);
        }
        FileOutputStream fos = new FileOutputStream("/tmp/" + filename);
        fos.write(response.body().bytes());
        fos.close();
    }

Avec ChromeDriver, je n'ai pas trouvé de moyen d'obtenir le fichier image, etc. avec get (url), j'ai donc passé l'URL à okhttp comme décrit ci-dessus pour la rendre cohérente avec le cookie.

Ou

        String[] cookieKeys = { "hoge", "hogehoge", "hogehogehoge" };
        StringBuilder cookie = new StringBuilder();
        for (String key : cookieKeys) {
            val oneCookie = getWebDriver().manage().getCookieNamed(key);
            cookie.append(String.format("%s=%s;", key, oneCookie.getValue()));
        }

        OkHttpClient client = new OkHttpClient().newBuilder().build();
        Request request = new Request.Builder().url(downloadUrl).header("Cookie", cookie.toString()).build();

        Response response = client.newCall(request).execute();

C'était bien de le mettre dans l'en-tête comme ça. Je souhaite que getWebDriver (). Manage (). GetCookie () puisse être complètement considéré comme une chaîne. Pouvez-vous le faire?

over.

Recommended Posts

Insérez le cookie sélénium dans le client okHttp3
SetCookie du côté client avec OkHttp3