java - 如何正确从网站获取 cookie?
问题描述
当我从集成开发环境运行它时,我的代码可以正确地从站点接收 cookie 并将其保存在一个文件中:
String url = "https://www.avito.ru";
Map<String, String> cookies = Jsoup.connect(url).execute().cookies();
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(cookies);
System.out.println("Get cookies from: " + url + " and write into: " + file.getName());
System.out.println(cookies);
out.close();
但是当我在 Heroku 服务器上上传并运行它时(但此时我暂时将 cookie 存储在处理程序对象中),我在日志中得到一个错误。它发生在步骤 .execute() 处。Heroku 代码:
try {
Map <String, String> cookies = Jsoup.connect(url)
.execute()
.cookies();
cookieHandler.setAvitoCookies(cookies);
System.out.println("> AVITO COOKIE:" + cookies);
} catch (IOException e) {
e.printStackTrace();
}
Heroku 错误日志:
org.jsoup.HttpStatusException: HTTP error fetching URL. Status=403, URL=https://www.avito.ru
有什么解决方案可以正确获取 cookie 吗?
解决方案
HttpStatusException
因为服务器返回了 403 状态码,所以您得到了一个。如果您想从错误响应(4xx - 5xx 状态代码)中读取 cookie,请添加ignoreHttpErrors(true)
方法:
Map <String, String> cookies = Jsoup.connect(url)
.ignoreHttpErrors(true)
.execute()
.cookies();
推荐阅读
- internationalization - SailsJS i18n 模块即使更改了语言环境也不会更改语言文件
- ansible - 通过 Ansible 创建 Azure Keyvault 机密
- xamarin.forms - 使用 Xamarin.Essentials 的文件附件
- c - 为什么以下c程序的输出是-10
- wordpress - 如何覆盖 WordPress 插件文件
- c# - 即使在 Azure 应用服务中发布后,JSON 文件数据也不会改变
- php - 如何使用外部 URL 或链接打开自定义选项卡及其 div?
- python - Django Rest Framework - 如何将图像导入为 JPEG 并使用序列化程序将其保存为 base 64?
- javascript - 如何将嵌套的 json 数据绑定到 angularjs 下拉列表中?
- jsf - 通过调用 javaScript 函数来中断 Bean 方法?