【问题标题】:How to correctly get cookies from website?如何正确地从网站获取 cookie?
【发布时间】:2019-09-13 01:20:02
【问题描述】:

当我从集成开发环境运行它时,我的代码可以正确地从站点接收 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

有没有办法正确获取cookies?

【问题讨论】:

    标签: java parsing heroku cookies


    【解决方案1】:

    您收到HttpStatusException,因为服务器返回了 403 状态代码。如果您想从错误响应(4xx - 5xx 状态码)中读取 cookie,请添加 ignoreHttpErrors(true) 方法:

    Map <String, String> cookies = Jsoup.connect(url)
                                        .ignoreHttpErrors(true)
                                        .execute()
                                        .cookies();
    

    【讨论】:

    • 现在也不例外了但是cookies map还是空的。
    • 这意味着当您收到 403 响应时没有 cookie。您应该能够在 Web 浏览器中进行调试。
    • 看来我找到了解决办法。需要在代码行中添加:.proxy(String ip , int port)
    • 这意味着您的网络在代理之后,但是这与您提出的问题完全不同。
    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多