java - 如何使用jsoup从一个需要登陆的网站下载图片
高洛峰
高洛峰 2017-04-17 17:41:15
0
4
383

有图片的地址,如: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来从网站下载图片

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(4)
左手右手慢动作

问题已解决,使用Firebug抓取浏览器中浏览图片时发送的请求包然后再根据其格式,使用URLConnection构造发送带cookies的请求包即可。就是对于大于1M的图片下载速度太慢了。

/**
     * 下载图片从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());
    }
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!