-1

所以我想制作某种幻灯片,显示来自pixiv页面的图片。基本思想是我给程序链接到我想显示的页面(https://www.pixiv.net/en/artworks/85339340)然后我希望我的程序只显示我第一次尝试的图像这样做:

 public TestURLImage() {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            }

            try {
                String path = "https://i.pximg.net/img-master/img/2020/10/31/00/13/28/85339340_p0_master1200.jpg";
                System.out.println("Get Image from " + path);
                URL url = new URL(path);
                BufferedImage image = ImageIO.read(url);
                System.out.println("Load image into frame...");
                JLabel label = new JLabel(new ImageIcon(image));
                JFrame f = new JFrame();
              //  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.getContentPane().add(label);
                f.pack();
                f.setLocation(200, 200);
                f.setVisible(true);
            } catch (Exception exp) {
                exp.printStackTrace();
            }

        }
    });
}

但这给了我这个错误:

javax.imageio.IIOException: Can't get input stream from URL!
    at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1407)
    at TestURLImage$1.run(TestURLImage.java:27)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
 Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://i.pximg.net/img-master/img/2020/10/31/00/13/28/85339340_p0_master1200.jpg   
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1932)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1528)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:224)
    at java.base/java.net.URL.openStream(URL.java:1167)
    at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1405)
    ... 14 more

所以就像我说的,我现在的想法是获取整个页面并显示图像,但我不知道该怎么做,请你帮忙。

4

1 回答 1

0

如果您仔细阅读异常消息,这部分在这里:

 Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://i.pximg.net/img-master/img/2020/10/31/00/13/28/85339340_p0_master1200.jpg   
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1932)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1528)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:224)
    at java.base/java.net.URL.openStream(URL.java:1167)
    at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1405)
    ... 14 more

解释 URL 正在返回 403 Forbidden,这意味着您无法直接访问图像。

当您打开一个网站时,您的浏览器会接收并存储一些 cookie,并在获取图像等时将其发送回服务器。搜索网络抓取技术可能会为您提供解决方案,但这就是我能说的全部,我不能进一步帮助您,因为这种访问网站资源的方式可能是盗版,并且在某些情况下是非法的。

于 2020-11-02T19:37:06.097 回答