recherche

Maison  >  Questions et réponses  >  le corps du texte

java - 如何使用jsoup从一个需要登陆的网站下载图片

有图片的地址,如:http://i2.pixiv.net/img-original/img/201...
还有登陆后获取的cooikes:Connection cookies(Map<String, String> cookies);
登陆和获取cooikes以及解析页面是使用的jsoup。
但是需要登陆后才能获取,使用以下代码:

private void downloadImg(String imgURL) throws MalformedURLException, IOException {
        URL url = new URL(imgURL);
        URLConnection uc = url.openConnection();
        InputStream is = uc.getInputStream();
        File file = new File("D:\\pixiv");
        FileOutputStream out = new FileOutputStream(file);
        int i = 0;

        while ((i = is.read()) != -1) {
            out.write(i);
        }
        is.close();
    }

只能下载不需要登陆的页面的图片。
要如何使用jsoup带cooikes来从网站下载图片

高洛峰高洛峰2886 Il y a quelques jours431

répondre à tous(4)je répondrai

  • ringa_lee

    ringa_lee2017-04-17 17:43:15

    Le problème a été résolu. Utilisez Firebug pour capturer le paquet de requête envoyé lors de la navigation dans les images dans le navigateur, puis utilisez la construction URLConnection pour envoyer le paquet de requête avec les cookies selon son format. La vitesse de téléchargement est trop lente pour les images de plus de 1 Mo.

    /**
         * 下载图片从URL
         *
         * @param img 图片对象
         * @param imgFile 代写入文件对象
         * @throws MalformedURLException 获取URL异常
         * @throws IOException URLConnection获取异常
         */
        public void downloadImg(Img img, File imgFile) throws MalformedURLException, IOException {
            URL url = new URL(img.getUrl());
            URLConnection uc = url.openConnection();
            uc.setConnectTimeout(Setting._Download_Img_TimeOut); // 设置下载图片超时时间
            uc.setRequestProperty("accept", "image/png,image/*;q=0.8,*/*;q=0.5");
            uc.setRequestProperty("accept-encoding", "gzip, deflate");
            uc.setRequestProperty("accept-language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
            uc.setRequestProperty("connection", "keep-alive");
            uc.setRequestProperty("cookie", PixivLogin.userCookies.toString());//这里是cookie部分
            uc.setRequestProperty("dnt", "1");
            uc.setRequestProperty("host", "i2.pixiv.net");
            uc.setRequestProperty("user-agent", Setting._DownLoadImgClient_UserAgent);
    
            uc.setDoInput(true);
            uc.setDoOutput(true);
            System.out.println("图片获取成功");
            System.out.println("开始写入硬盘");
            InputStream is = uc.getInputStream();
            FileOutputStream out = new FileOutputStream(imgFile);
            //BufferedOutputStream bout = new BufferedOutputStream(out);
            int i = 0;
    
            while ((i = is.read()) != -1) {
                out.write(i);
            }
            is.close();
            System.out.println(img.getName() + "写入完毕 " + imgFile.length());
        }

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-17 17:43:15

    Peu importe ce que vous utilisez pour analyser le HTML, la seule chose qui détermine votre connexion est le cookie dans la requête http, vous pouvez donc d'abord faire une demande de connexion, obtenir le cookie de http res, puis définir le cookie sur le prochaine requête http. Ceci termine l'opération de conservation des cookies du navigateur et les données de ressources qui nécessitent une connexion peuvent être téléchargées

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-17 17:43:15

    Après avoir extrait img src, si vous utilisez URLConnection pour télécharger des images, avez-vous l'autorisation ? Vérifiez s'il y a quelque chose comme session_id sur le site Web. En bref, recherchez l'ID de connexion de l'utilisateur et mettez un identifiant dans img src<🎜. >

    répondre
    0
  • 怪我咯

    怪我咯2017-04-17 17:43:15

    Utilisez apache httpClient pour simuler la connexion

    répondre
    0
  • Annulerrépondre