[JAVA] Fügen Sie das Selenium-Cookie in den okHttp3-Client ein

Nehmen Sie ein Cookie vom Selenium-Webtreiber (wie Selenid) und schließen Sie es an den okhttp-Client an

Da der Typ anders ist, musste ich ihn übergeben. Ich dachte, ich könnte es besser machen, aber ich gab auf. Das folgende Beispiel zeigt das Herunterladen von URLs

    private void downloadFileSync(final String downloadUrl, String orgFilename) throws Exception {
        List<Cookie> cookies = new ArrayList();
        String domain = "example.com";// .Eine Ausnahme bilden Domänen, die mit k beginnen..getDomain()Nach der Einnahme.Oder direkt angeben
        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();
    }

Mit ChromeDriver konnte ich mit get (url) keine Möglichkeit finden, die Bilddatei usw. abzurufen. Daher habe ich die URL wie oben beschrieben an okhttp übergeben, um sie mit dem Cookie in Einklang zu bringen.

Oder

        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();

Es war gut, es einfach so in den Header zu setzen. Ich wünschte, getWebDriver (). Manage (). GetCookie () könnte vollständig als String genommen werden. Kannst du es machen?

over.

Recommended Posts

Fügen Sie das Selenium-Cookie in den okHttp3-Client ein
SetCookie von der Client-Seite mit OkHttp3