从java的Url下载图像.服务器返回HTTP响应代码:403错误.我怎样才能使连接正常工作?



我试图从某个url下载图片,但不能这样做,因为我不知何故必须给正确的用户客户端到网站。我确信问题是,我不能给用户客户端,而使用Url类,因为页面可以通过浏览器访问。我尝试使用代理和url连接,但不能让它工作。请分享你对这件事的看法!

我的代码如下:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.SocketAddress;
import java.net.URL;
import java.net.URLConnection;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
public class KepLetolto {
    public static void main(String[] args) throws IOException {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        File file = new File("tempjpeg");
         SocketAddress address = new java.net.InetSocketAddress("xyz.com", 8080);
         // Create an HTTP Proxy using the above SocketAddress.
         Proxy proxy = new Proxy(Proxy.Type.HTTP, address);

        URL url_kep =new URL("http://www.theouthousers.com/images/templates/thumbnails/128058/bayfinger_size3.png");
        ImageIO.write(ImageIO.read(url_kep), "jpeg", file);
        Mat uj = Highgui.imread("temp.jpeg" ,Highgui.CV_LOAD_IMAGE_COLOR);  
    }
}

不要使用ImageIO.read(URL),它限制了URL的底层URLConnection的默认行为,使用ImageIO.read(InputStream)

这允许您使用任何HTTP客户端库—包括基本的HttpURLConnection,您可以从(HttpURLConnection)url_kep.openConnection()获得它。使用它,您可以设置标题,如User-Agent,如果这是网站要求的标题,或其他标题,如Referer,有时用于防止深度链接。

一旦您设置了所有的头和任何其他请求选项,您可以从客户端对象获得InputStream,并将其传递给ImageIO

这个解决方案对我有用:

URLConnection openConnection = new URL("YOUR_IMAGE_URL").openConnection();
openConnection.addRequestProperty("User-Agent", "YOUR USER AGENT");
InputStream is = openConnection.getInputStream();
BufferedImage saveImage = ImageIO.read(is);
ImageIO.write(saveImage, "png", new File("PATH\TO\IMAGE\FILE.PNG"));

相关内容

  • 没有找到相关文章

最新更新