当前位置: 首页 > 面试题库 >

ImageIO.read()返回403错误

郭俊人
2023-03-14
问题内容

我有以下代码:

public BufferedImage urlToImage(String imageUrl) throws MalformedURLException, IOException {
    URL url = new URL(imageUrl);
    BufferedImage image = ImageIO.read(url);
    return image;
}

那应该从给定的URL返回图像。

我测试了以下两个随机选择的URL:

  • https://www.google.co.ma/images/srpr/logo4w.png
  • http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg

第一个可以正常工作,但是第二个却出现403错误:

Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
at java.net.URL.openStream(URL.java:1010)
at javax.imageio.ImageIO.read(ImageIO.java:1367)

错误的原因可能是什么?谢谢。


问题答案:

ImageIO.read(URL)方法将打开具有几乎所有默认设置的URL连接,包括User- Agent属性(该属性将被设置为您正在运行的JVM版本)。显然,您列出的网站希望使用更“标准”的UA。使用直接的telnet连接进行测试:

请求发送者ImageIO.read(url)

GET /newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-
survive_3011.jpg HTTP / 1.1
用户代理:Java / 1.7.0_17
主机:www.earthtimes.org
接受:text / html,image / gif,image / jpeg,*;q = .2, / ; q = .2
连接:保持活动状态



响应代码为404(至少对我来说),并text/html返回默认页面。

“标准”浏览器发送的请求:

GET /newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-
survive_3011.jpg HTTP / 1.1
用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_7_5)AppleWebKit /
537.31(KHTML,例如Gecko)Chrome / 26.0 .1410.65 Safari / 537.31
主机:www.earthtimes.org
接受:text / html,image / gif,image / jpeg,*;q = .2, / ; q = .2
连接:保持活动状态

响应码为200,带有图像数据

以下简单修复程序通过设置更“标准”的UA来延长代码长度,但可以解决问题:

final String urlStr = "http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg";
final URL url = new URL(urlStr);
final HttpURLConnection connection = (HttpURLConnection) url
        .openConnection();
connection.setRequestProperty(
    "User-Agent",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31");
final BufferedImage image = ImageIO.read(connection.getInputStream());


 类似资料:
  • 问题内容: 以下代码似乎不起作用,即使该文件看起来很好也是如此。 在此先感谢您的帮助。 编辑:结果是我试图去Graphics.drawImage(images [0]);,它给了我一个空指针异常。这段代码可以很好地完成。 编辑:更改按建议移动if(!file.exists()),并将文件包装在输入流中。 问题答案: ImageIO.read(file); 如果找不到注册的 ImageReader,

  • 问题内容: 线 失败于 我正在使用Eclipse,并且在bin文件夹下的导航视图中有文件gate_and.png,表明该文件位于构建路径中。 在包浏览器视图中,我有 和 我右键单击项目文件夹>构建路径>链接源以将images文件夹添加为源,再次执行此操作会提供一条确认消息,指出源中已存在图像。 我还尝试过将gate_and.png更改为images / gate_and.png和/images/g

  • 对localhost的Ajax请求返回403错误。然而,当我更改controller requestMethod以获取并在浏览器上打开请求“url”时,它会显示从服务器返回的json数据。我希望使用这些数据填充一个下拉列表。请帮帮我。我正在使用spring security 4.0和spring MVC框架。CSRF未禁用。此外,该url在Spring得到保护。 我在这里查看了相关问题,但没有找到

  • 问题内容: 我正在尝试制作Sitecraper。我是在本地计算机上制作的,在那儿工作得很好。当我在服务器上执行相同操作时,它显示403禁止错误。我正在使用PHP简单HTML DOM解析器 。我在服务器上收到的错误是这样的: 警告:file_get_contents(http://example.com/viewProperty.html?id=7715888)[function.file- get

  • 我的安全配置似乎不正确。无论我在使用hasRole时做什么,我的endpoint总是返回403。 此外,除非我在这两个和。很明显,我遗漏了一些东西。 基本上,我希望所有内容都需要身份验证,但只有当用户是某些组的成员时(现在只需要admin),少数endpoint才可以访问。 我的安全配置如下。旁边的一切都有效。 我的AuthenticationConfiguration如下 我的Authoriza

  • 问题内容: 考虑以下Python代码: 运行此命令时,将引发异常: 但是,将其放入浏览器后,搜索将按预期返回。这里发生了什么?如何克服这个问题,以便可以通过编程方式搜索Google? 有什么想法吗? 问题答案: 如果您想通过编程界面“适当”进行Google搜索,请查看Google API 。这些不仅是搜索Google的正式方法,而且如果Google更改结果页面的布局,它们也不太可能改变。