我正在尝试从某个网址下载图片,但无法这样做,因为我必须以某种方式向网站提供正确的用户客户端。我确信问题是我在使用 Url 类时无法提供用户客户端,因为该页面可以通过浏览器访问。我尝试使用代理和 Urlconnection 但无法使其工作。请分享您对此事的看法!
我的代码如下:
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
之类的 header (如果这是网站所需的 header ),或者设置其他 header (例如 Referer
),这些 header 有时用于防止深层攻击链接。
设置所有 header 和任何其他请求选项后,您可以从客户端对象获取 InputStream
,并将其传递给 ImageIO
。
关于java - 从 java.Server 中的 Url 下载图像返回 HTTP 响应代码 : 403 error. 如何使连接正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280539/