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.