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.