gpt4 book ai didi

java - 通过身份验证将在线 pdf 内容传输到 BufferedInputStream

转载 作者:行者123 更新时间:2023-11-30 05:30:50 44 4
gpt4 key购买 nike

我一直在尝试阅读在浏览器中打开的 pdf 内容 - 但没有成功。我在网上找到的所有例子都需要这一步:

    URL url = new URL(strURL);
BufferedInputStream file = new BufferedInputStream(url.openStream());
PDFParser parser = new PDFParser(file);

问题是我必须首先在网站中进行身份验证 - 然后导航到 pdf 位置 - 该位置在新选项卡上打开 - 然后我切换到该选项卡并获取 url。

但是,当我将 URL 传递给上面的代码时 - 它正在创建一个新请求,因此它丢失了身份验证,并且网站返回代码 401-Unauthorized

一个重要的细节 - 这是一个嵌入的 pdf。

是否有我可以使用的解决方法 - 例如抓取已加载的 pdf - 而不是进行新的调用?我没主意了。谢谢!

编辑

我想到的一个可能的解决方法是在 Chrome 上打开此设置

Download PDF files instead of automatically opening them in Chrome    On/Off

是否可以通过编程方式打开此设置?请注意,我在 Selenium 使用的 Chrome 配置文件上打开了该设置,但是当 Selenium 浏览器打开时,此设置将被关闭。

这可以通过添加选项来解决:

ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=<path_to_profile>");
driver = new ChromeDriver(options);

更新

Abhishek Dhoundiyal 答案很棒 - 我唯一改变的 - 因为我在导航到特定页面时已经通过了身份验证 - 而不是再次传递用户名和密码 - 我刚刚保存了 cookie 并将它们加载到 url:

Set<Cookie> allCookies = driver.manage().getCookies();

那么,

URL url = new URL(strUrl);
HttpURLConnection myURLConnection = (HttpURLConnection)url.openConnection();

for(Cookie cookie : allCookies) {
myURLConnection.setRequestProperty("Cookie", cookie.toString());
}

myURLConnection.setRequestMethod("GET");
BufferedInputStream file = new BufferedInputStream(myURLConnection.getInputStream());

最后对 pdf 进行一些操作,即:获取文本。

最佳答案

为了避免 401-Unauthorized,您需要传递您的用户凭据。

    URL url = new URL("YOUR_URL");

HttpURLConnection myURLConnection = (HttpURLConnection)url.openConnection();
String userCredentials = "username:password";
String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
myURLConnection.setRequestProperty ("Authorization", basicAuth);
myURLConnection.setRequestMethod("GET");

BufferedInputStream file = new BufferedInputStream(myURLConnection.getInputStream());
PDFParser parser = new PDFParser(file);

启用下载

    ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("download.prompt_for_download", false);
prefs.put("download.directory_upgrade", true);
prefs.put("download.default_directory", "path-to-download-directory");
options.setExperimentalOption("prefs", prefs);
WebDriver driver = new ChromeDriver(options);

关于java - 通过身份验证将在线 pdf 内容传输到 BufferedInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57601309/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com