如何以编程方式接受cookie的使用?

时间:2016-02-10 13:39:55

标签: java android html cookies

我一直在尝试使用Android上的JSOUP解析网站,以便提取存储在HTML中的所有图像。我遇到的问题是,有些网站会要求您明确接受使用Cookie,然后才能进一步浏览。在解析这些网站的HTML时,我只获得要求您接受cookie的窗口的HTML,但由于我是从代码中执行此操作,因此我不知道如何接受cookie或如何解决它。

这甚至可能吗?

例如,网站http://tweakers.net。当我用以下内容解析它时:

        try {
            //Connect to the website and get the html
            Document doc = Jsoup.connect(uri).get();

            //Get all elements with img tag ,
            Elements img = doc.getElementsByTag("img");

            for (Element el : img) {
                //for each element get the srs url
                String src = el.absUrl("src");
                logger.e("image found: " + src);
                //getImages(src);
            }
        } catch (IOException ex) {
            System.err.println("There was an error");
            logger.e(ex.getMessage());
        }

我得到的唯一输出是:

image found: http://tweakimg.net/g/cookies/logo-50x50.png

这是小窗口上的图像,要求您接受使用cookies

所以我的问题是:是否有可能解析真实的网站,即使有这个cookie的东西,我该怎么办? 如果可能的话,我想知道一种适用于每个可能网站的独特方式。因为据我所知,关于cookie处理的大多数帖子都是针对特定网站的,它们包括创建网站要求的cookie,但这将是一个大问题,因为不同的网站以不同的方式实现他们的cookie。

使用案例: 当用户在手机上浏览网页然后点击分享按钮时,此过程开始。意图启动我的应用程序,我得到了待共享网站的网址,我用jsoup解析它。

2 个答案:

答案 0 :(得分:2)

lots of answers here有关如何配置JSoup以将Cookie传递到目标网站,一旦您确定(手动)Cookie应该是什么样子。

Cookie to log in with Jsoup?可能是最简单的

然而,除了最简单的网站互动案例 - 并且鉴于您已经使用Java进行编码 - 您可能会考虑调查Selenium WebDriver。在这种情况下,您将使用真实的浏览器与网站进行交互,而不是具有自己的cookie存储库的HTTP库,这就是JSoup构建在其上的。

答案 1 :(得分:1)

我认为您正在解决仅在保护隐私人隐私的同时创建的问题。您正在连接的网站试图通知某人并尝试征得他们的同意。

另一方面,我认为这些网站并不希望让抓取工具查找和索引其网页。

尝试设置User-Agent,表示与常见浏览器不同的信号。那可能已经做到了。 如果这不起作用,请尝试模仿某个网络抓取工具,例如Google,BING或者发送与curl相同的标题。